To compile views with procedures

I want to compile a list of views with a procedures or functions what can I do ?

In the future be sure when you post to state version number to three decimal places and the reason for asking the question.
Had you done so you might have been quickly referred to UTLRP.SQL or the built in package UTL_RECOMP.
When looking for dependencies ... join with DBA_DEPENDENCIES.

Similar Messages

  • How can I compile all functions, procedures and packages with a script?

    I need to compile all functions, procedures and packages of 5 schemas (users) with a script.
    How can I do it?
    Thanks!

    you can create a script to select all invalid objects in those schemas Since Oracle 8 introduced NDS this approach has struck me as a trifle old fashioned. It's much simpler to loop round the query in PL/SQL and use EXECUTE IMMEDIATE to fire off the DDL statements. No scripts, no muss, no fuss.
    Having said that, the problem with this approach and also with using DBMS_UTILITY.COMPILE_SCHEMA is that they do not compile all the invalid objects in dependency order. This may result in programs being invalidated by the subsequent compilation of dependencies. This is due to the introduction of Java into the database.
    The UTLRP script is much better, because it (usually) avoids cyclic references. But you still may need to run it more than once.
    In general it is better to avoid sledgehammer recompilations (like DBMS_UTILITY.COMPILE_SCHEMA, which starts by invalidating all the objects). If we have twenty invalid objects, nineteen of which are dependencies of the twentieth, we actually only need to recompile the master object, as recompiling it will trigger the recompilation of all the others.
    Cheers, APC

  • Create a view with parameter

    it's posible create a view with parameters?
    i want to create a view and pass it parameters, in the same way when i create a procedure or function.
    i never have seen it, but i would like to know if that's posible
    thanks

    You cannot create a view with parameters. The only way is to use a stored proc to dynamically create the sql statement. The substitution variable approach does not work. SQL*Plus will prompt for the value of the variable at compile time (i.e. when you create the view) and use the value you provide in the view's query.
    SQL> create or replace view jws_test_v as
      2  select * from jws_test where flag = '&flg'
      3  /
    Enter value for flg: AA
    old   2: select * from jws_test where flag = '&flg'
    new   2: select * from jws_test where flag = 'AA'
    View created.
    SQL> select * from jws_test_v
      2  /
    no rows selected
    SQL> select text from user_views where view_name = 'JWS_TEST_V'
      2  /
    TEXT
    select "LEV1","LEV2","LEV3","LEV4","LEV5","LEV6","FC","FLAG","ONAFT","ONAPT","CU
    PEFT","CUPEPT" from jws_test where flag = 'AA'This makes sense, since substitution vartiables are a sqlplus construct, not a sql or Oracle construct. A view constructed in this way would not be callable from anywhere other than sqlplus.

  • Compiling packages or procedures

    Hello,
    I am compiling a package , procedures etc. The query comes back with invalids. I have show error. How do I retrieve more detail information about why the package/procedure/view are invalid?
    DECLARE
                    v_status       VARCHAR2(10);
                    v_cmd          VARCHAR2(150);
                    Cursor rw_objects
                     IS
                      Select object_name,object_type,status,owner
                      From dba_objects
              WHERE UPPER(object_type) IN ('VIEW','PROCEDURE','FUNCTION','PACKAGE', 'PACKAGE BODY','TRIGGER','SYNONYM')
              AND owner = UPPER('&&DW_SCHEMA')
                      AND status = 'INVALID';
             BEGIN
                 FOR  t IN rw_objects
                           LOOP
                                  IF  t.object_type ; IN ('SYNONYM','VIEW','TRIGGER','PROCEDURE','FUNCTION') THEN
                                      v_cmd  := 'ALTER ' || t.object_type || ' ' || t.owner||'.'||t.object_name || ' COMPILE ';  
                                     execute immediate v_cmd;
                         ELSIF
                                     t.object_type ; = ('PACKAGE') THEN                                 
                                     v_cmd  := 'ALTER  PACKAGE ' || ' ' || t.owner||'.'||t.object_name || ' COMPILE PACKAGE';  
                                     execute immediate v_cmd;  
                                  ELSIF                               
                                      t.object_type ; = ('PACKAGE BODY') THEN                                 
                                      v_cmd  := 'ALTER PACKAGE ' || ' ' || t.owner||'.'||t.object_name || ' COMPILE BODY';  
                                     execute immediate v_cmd;  
                                    dbms_output.put_line( rpad( t.object_type || ' ' || t.object_name, 50, ' ' ) || ' VALID ');
                                  END IF;
                    END LOOP;
    END;
    SELECT   object_name, object_type, status                    
                   FROM  dba_objects
                   WHERE STATUS = 'INVALID'     
                   AND UPPER(object_type) IN ('VIEW','PROCEDURE','FUNCTION','PACKAGE', 'PACKAGE BODY','TRIGGER','SYNONYM')
                   AND owner = UPPER('&&DW_SCHEMA')
               ORDER by object_type;
    show errors; Here are the results.
    OBJECT_NAME                                                                OBJECT_TYPE         STATUS                            
    PM206                                                                           PACKAGE BODY        INVALID
    DW_BE_DFACT_TB_REFRESH_HANDLER                            PACKAGE BODY        INVALID
    DW_BE_DFACT_TB_INITIAL_HANDLER                               PACKAGE BODY        INVALID
    CHART_HANDLER                                                            PACKAGE BODY        INVALID
    DW_CRS_HANDLER                                                          PACKAGE BODY        INVALID
    DELETE_UPDATE_PROC                                                   PROCEDURE           INVALID
    DW_CBS_PROC                                                              PROCEDURE           INVALID
    DW_GL_DFACT_VW                                                           VIEW                INVALID
    8 rows selected.
    No errors.

    too bad COPY & PASTE are broken for you!
      1  DECLARE
      2                  v_status       VARCHAR2(10);
      3                  v_cmd          VARCHAR2(150);
      4                  Cursor rw_objects
      5                   IS
      6                    Select object_name,object_type,status,owner
      7                    From dba_objects
      8            WHERE UPPER(object_type) IN ('VIEW','PROCEDURE','FUNCTION','PACKAGE', 'PACKAGE BODY','TRIGGER','SYNONYM')
      9            AND owner = UPPER('&&DW_SCHEMA')
    10                    AND status = 'INVALID';
    11           BEGIN
    12               FOR  t IN rw_objects
    13                         LOOP
    14                                IF  t.object_type ; IN ('SYNONYM','VIEW','TRIGGER','PROCEDURE','FUNCTION') THEN
    15                                    v_cmd  := 'ALTER ' || t.object_type || ' ' || t.owner||'.'||t.object_name || ' COMPILE ';
    16                                   execute immediate v_cmd;
    17                       ELSIF
    18                                   t.object_type ; = ('PACKAGE') THEN
    19                                   v_cmd  := 'ALTER  PACKAGE ' || ' ' || t.owner||'.'||t.object_name || ' COMPILE PACKAGE';
    20                                   execute immediate v_cmd;
    21                                ELSIF
    22                                    t.object_type ; = ('PACKAGE BODY') THEN
    23                                    v_cmd  := 'ALTER PACKAGE ' || ' ' || t.owner||'.'||t.object_name || ' COMPILE BODY';
    24                                   execute immediate v_cmd;
    25                                  dbms_output.put_line( rpad( t.object_type || ' ' || t.object_name, 50, ' ' ) || ' VALID ');
    26                                END IF;
    27                  END LOOP;
    28* END;
    29  /
    old   9:           AND owner = UPPER('&&DW_SCHEMA')
    new   9:           AND owner = UPPER(' USER1')
                                  IF  t.object_type ; IN ('SYNONYM','VIEW','TRIGGER','PROCEDURE','FUNCTION') THEN
    ERROR at line 14:
    ORA-06550: line 14, column 49:
    PLS-00103: Encountered the symbol ";" when expecting one of the following:
    . ( * @ % & = - + < / > at in is mod remainder not rem then
    <an exponent (**)> <> or != or ~= >= <= <> and or like like2
    like4 likec between || multiset member submultiset
    The symbol ";" was ignored.
    ORA-06550: line 18, column 48:
    PLS-00103: Encountered the symbol ";" when expecting one of the following:
    . ( * @ % & = - + < / > at in is mod remainder not rem then
    <an exponent (**)> <> or != or ~= >= <= <> and or like like2
    like4 likec between || multiset
    ORA-06550: line 22, column 49:
    PLS-00103: Encountered the symbol ";" when expecting one of the following:
    . ( * @ % & = - + < / > at in is mod remainder not rem then
    <an exponent (**)> <> or != or ~= >= <= <> and or like like2
    like4 likec between || multiset
    SQL>

  • View creation Procedure

    Hi,
    I hav created a procedure to create a daily view with 62 tables somthing like this
    Create or replace Procedure View_Cre as
    ex_command LONG:= null;
    ex1_command LONG:= null;
    ex2_command LONG:= null;
    ex3_command LONG:= null;
    begin
    ex1_command :='CREATE VIEW VIEW_NAME AS '||chr(10)||'Select * from TAB_'||to_char(sysdate,'DD_MON_YY');
    ---dbms_output.put_line(ex1_command);
    for idx in 1..61 loop
    ex_command := ''||chr(10)||' union all'||chr(10)||' Select * from TAB_'||to_char(sysdate-idx,'DD_MON_YY');
    --execute immediate ex_command;
    --- dbms_output.put_line(ex_command);
    ex2_command:=ex1_command||ex_command;
    ex1_command:=' ';
    ex3_command:= trim(ex2_command);
    --dbms_output.put_line(ex2_command);
    execute immediate ex3_command;
    end loop;
    end View_Cre;
    However its not "*" there in select statement it contains large string like 30000 chars.
    dbms_output gives me correct output but exec immediate gives invalide sql statement,
    the output from dbms_output.put_line(ex2_command) creates view without errors when pasted on sql prompt.
    Please help.
    Thanks in advance.

    May be like this ..
    declare
      ex_command  LONG := null;
      ex1_command LONG := null;
      ex2_command LONG := null;
      ex3_command LONG := null;
    begin
      ex1_command := 'CREATE FORCE VIEW VIEW_NAME AS ' || chr(10) ||
                     'Select * from TAB_' || to_char(sysdate, 'DD_MON_YY');
      ---dbms_output.put_line(ex1_command);
      for idx in 1 .. 61 loop
        ex_command := '' || chr(10) || ' union all' || chr(10) ||
                      ' Select * from TAB_' ||
                      to_char(sysdate - idx, 'DD_MON_YY');
        --execute immediate ex_command;
        --- dbms_output.put_line(ex_command);
        ex2_command := ex1_command || ex_command;
        ex1_command := ' ';
        ex3_command := ex3_command || trim(ex2_command);
        --dbms_output.put_line(ex2_command);
      --dbms_output.put_line(ex3_command);
      --dbms_output.put_line(ex3_command);
      end loop;
      --dbms_output.put_line(ex3_command);
      execute immediate ex3_command;
    end;Although, I must say that it is not a good design. You may want to look at your requirement again and see whether it is really required to create a view with dynamic SQL.
    Also, you may want to look at the short comings of using LONG in PL/SQL and supported data type in EXECUTE IMMEDIATE with length restriction.

  • Insert order by records into a view with a instead of trigger

    Hi all,
    I have this DML query:
    INSERT INTO table_view t (a,
                              b,
                              c,
                              d,
                              e)
          SELECT   a,
                   b,
                   c,
                   d,
                   e
            FROM   table_name
        ORDER BY   dtable_view is a view with an INSTEAD OF trigger and table_name is a table with my records to be inserted.
    I need the ORDER BY clause because in my trigger i call a procedure who treat each record and insert into a table, used in the view. I need to garantee these order.
    If i put an other SELECT statement outside, like this:
    INSERT INTO table_view t (a,
                              b,
                              c,
                              d,
                              e)
          SELECT   a,
                   b,
                   c,
                   d,
                   e
            FROM   table_name
        ORDER BY   dIt works. But I can put these new SELECT because these query is created automatic by Oracle Data Integrator.
    What I'm asking you is if there any solution to this problem without changing anything in the Oracle Data Integrator. Or, in other words, if there is any simple solution other than to add a new SELECT statement.
    Thanks in advance,
    Regards.

    Sorry... copy+paste error :)
    INSERT INTO table_view t (a,
                              b,
                              c,
                              d,
                              e)
        SELECT   *
          FROM   (  SELECT   a,
                             b,
                             c,
                             d,
                             e
                      FROM   table_name
                  ORDER BY   d)I need to insert him by a D column order, because my trigger needs to validate each record and insert him. I have some restrictions. For example, my records are:
    2     1     2006     M
    1     2     2007 M
    1     3     2007     S 2007
    1     2     2007     S 2007
    2     1     2009     S
    2     1     2009     S
    I want to insert the 'M' records first and then the 'S' records because the 'S' records only makes sense in target table is exists 'M' records
    Regards,
    Filipe Almeida

  • Is it possible to create a spatial view with paramete?

    Is it possible to create a view with parameter like following:
    SELECT GEOM FROM INTERSTATES WHERE MDSYS.SDO_FILTER(GEOM, MDSYS.SDO_GEOMETRY(2003, 8307, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 1003, 3), MDSYS.SDO_ORDINATE_ARRAY(?, ?, ?, ?)), 'querytype=WINDOW') = 'TRUE'
    so that I can specify ???? at run time.
    If not, is there a way to create a view that perform variable window query?

    You may want to look at application contexts, that way you may have code something like this:
    create or replace context gis_ctx using gis_params ;
    create or replace package gis_params
    as
    procedure set_bounds( minx in number, miny in number, maxx in number,maxy in number );
    end;
    create or replace package body gis_params
    as
    procedure set_bounds( minx in number, miny in number, maxx in number,maxy in number )
    is
    begin
    dbms_session.set_context( 'gis_ctx', 'minx', minx);
    dbms_session.set_context( 'gis_ctx', 'miny', miny);
    dbms_session.set_context( 'gis_ctx', 'maxx', maxx);
    dbms_session.set_context( 'gis_ctx', 'maxy', maxy);
    end ;
    end ;
    To use this method you´ll have to execute
    gis_params.set_bounds(-3,40,-2.9,40.1) ;
    before doing the select.
    SELECT GEOM
    FROM INTERSTATES
    WHERE MDSYS.SDO_FILTER(GEOM,
    MDSYS.SDO_GEOMETRY(2003,
    8307,
    NULL,
    MDSYS.SDO_ELEM_INFO_ARRAY(1, 1003, 3),
    MDSYS.SDO_ORDINATE_ARRAY(sys_context ('gis_ctx', 'minx'),
    sys_context ('gis_ctx', 'miny'),
    sys_context ('gis_ctx', 'maxx'),
    sys_context ('gis_ctx', 'maxy'))),
    'querytype=WINDOW') = 'TRUE' ;
    I f you are in a web environment, read about GLOBAL CONTEXT ACCESSED GLOBALLY .
    Regards, Nico.

  • Need to add a new View With ITS Link in it

    Hello All ,
      I am Working on SAP CRM 7.0 in Marketing here in marketing We do have an Account Work Center here in account we have three views Search , Create and Report .I want to add a new view with name "XYZ" in this view i want have Logical links . This logical link is ITS (Transaction Launcher ). Can any one Tell me the Procedure for this . Thanks in Advance
    regards,
    KiranPosanapalli

    Solved by myself

  • "Refresh after" insert fails for DB-View with INSTEAD OF Triggers

    Hi,
    I have a database view with INSTEAD OF triggers defined for INSERT, UPDATE, DELETE.
    For some EO attributes the refresh after insert and update is defined.
    Posting to database fails.
    According to Database 9.2 Manual and a previous thread (BC4J and Updatable Views the RETURNING clause is not allowed for database views with INSTEAD OF triggers.
    Is there a workaround so the refresh after is done, but without the RETURNING feature?
    I only need to refresh some values. The PK i can set in the create method of the EO so refresh via a additional SELECT would be possible.
    If not Feature Request:
    Add the possibility to do the "refresh after ..." with a 2nd SELECT using the PK instead of using the RETURNING clause.
    Of course then it is not possible to set the PK in the database trigger. PK has to be set in the create method of the EO.
    Thanks,
    Markus
    GEMS IT

    Hi Markus,
    Turning on the stack trace (-Djbo.debugout put=Console - in the Project/runner) did help and I should have done it sooner. Turns out that when I constructed my EO based upon a database view - I should have left out the PKs of the base tables.
    In my case, I am using an "Instead Of Trigger" to populate a multi-table arrangement (parent - child - grandChild - greatGrandChild relationship) where all base tables are using dbSequence/dbTriggers.
    Final analysis - I would like to see BC4J handle this situation. I do not want to use View-Links and I should * not * have to resort to stored procedures and BC4J/doDML. If I construct a DB View this is participating in an parent - child - grandChild - greatGrandChild relationship that are using dbSequence/dbTriggers, then BC4J should be smart enough to construct VO knowing that I want to do insert, update, delete, selects - based upon this structure.
    Thanks Markus,
    Bill G...

  • ADF BC: Creating updatable VO based upon DB View with "instead of" trigger

    Hello all,
    I have got an interesting issue. I have an Oracle DB view that is used to hide some complexity in the underlying DB design (it does some unions). This view is updatable because we have created an "instead of" update trigger to update the correct table when a row is updated. This is working fine in SQL.
    Next, we have created an ADF Entity object based upon the view, specifying an appropriate PK for the DB View. Then, we have created an updatable VO based upon the EO. All well and good so far. The issue we have is in trying to commit changes to the DB - because the ADF BC framework is trying to lock the row to update (using SELECT ... FOR UPDATE), it's not working because of ORA-02014 - cannot select FOR UPDATE from view with DISTINCT, GROUP BY, etc.
    This leads me to thinking about overridding doSelect() on the EO as hinted here http://radio.weblogs.com/0118231/stories/2005/07/28/differenceBetweenViewObjectSelectAndEntityDoselectMethod.html
    As a temporary test, we have over-ridden the EO's doSelect to call super.doSelect(false) and it does work, although we will have lost update issues as detailed in Steve's article.
    My questions:
    1). Is overriding doSelect() the correct thing here? Perhaps there is a better way of handling this problem? I do have a base EO class from which all of the EO's extend, so adding this behavior should be straightforward.
    2). Does anyone have example doSelect implementation? I am thinking of overriding doSelect for my EO and calling super.doSelect (lock=false), but then I need to deal with some possible exceptions, no?
    Kind regards,
    John

    Hi John,
    I have exactly the same issue as you experienced back in January. I have a complex data modelling requirement which requires the need to pivot rows into columns using ROW_NUMBER() and PARTITION clauses. To hide the complexity from the middle tier, I have created a database view and appropriate INSTEAD OF triggers and mapped my EO to the view. I have overriden the lock() method on the EO implementation class (to avoid ORA-02014) and would like to try the same solution you used with the pl/sql call to lock the record.
    My question is, how did you manage the release of the lock if the transaction was not rolled back or committed by your application i.e. if the user closed the browser for instance.
    In my naivity, I would like to think that the BC4J framework would release any locks for the database session when it found the servlet session to be terminated however my concern is that the lock would persist and cause complications.
    Any assistance greatly appreciated (if you would be willing to supply your lock() method and pl/sql procedure logic I would be even more grateful!).
    Many thanks,
    Dave
    London

  • How to restore views and procedures after drop user command?

    How to restore views and procedures after drop user command?
    We have 817 EE on NT and one developer created a lot of procedures, functions and vews. DB was not backuped and archived and export has not been done - our fault and we understand it. Sorry for this.
    Ok, now the story: another developer dropped this db user and we lost everything: procedures, functions and vews. The new user with trhe same name was created and new schema was imported in this user, but all old objects are lost. We don't have export and backup and archive log files.
    Question: may we can restore this lost stuff from some other sources. We are looking for lost codes, not data. May be we can use redo logs or shared pool or any other things. Any idea will be appreciated.
    Thanks.
    Victor
    [email protected]

    The switch has occurred after user was dropped, the data has been overwritten and there is be no way to use redo log files.
    I would like to explore another opportunity. Is possible to use Shared Pool or any Data Dictionary internal information to restore texts of the lost SQL and PL/SQL scripts executed in this DB before user was dropped? Not too many scripts are executed in this DB and the lost ones may still be in stack. I remember that Shared Pool (cash) should keep last executed scripts in order to improve performance. They probably are kept in some special format. Can we restore these scripts? Of course they also might be pushed out by Import that had been done after user was dropped.
    Thanks for your help,
    Victor

  • Need help in creating a view with Encryption for hiding the code used by the multiple users

    Hi,
    Can anyone help me out in creating view with encryption data to hide the stored procedure logic with other users.
    I have create a stored procedure with encryted view but while running this manually temporary views are getting created, therefore the problem is if there are 500 entries then 500 temp views will get created.
    Any solution to aviod creating temporary views, please refer my code below
    USE [etl_validation]
    GO
    /****** Object:  StoredProcedure [dbo].[Pr_DBAccess_mod]    Script Date: 05/23/2014 12:53:22 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[Pr_DBAccess_mod](@ETL_CONFIG_ID INT)
    AS
    BEGIN
    DECLARE @openquery NVARCHAR(MAX),
     @DATABASENAME NVARCHAR(100),
     @HIERNAME NVARCHAR(100),
     @TABLENAME NVARCHAR(100),
     @SERVERTYPE NVARCHAR(100),
     @SERVERNAME NVARCHAR(100),
     @USERNAME NVARCHAR(100),
     @PASSWORD NVARCHAR(100),
     @ETL_CONFIG_IDN NVARCHAR(100);
     SET @ETL_CONFIG_IDN=CAST(@ETL_CONFIG_ID AS NVARCHAR);
     SET @TABLENAME='Department';
     SET @SERVERTYPE='SQL';
     SET @SERVERNAME ='192.168.31.176';
     SET @DATABASENAME='AdventureWorks2008R2';
     SET @HIERNAME = 'HumanResources';
     IF @SERVERTYPE='SQL'
     BEGIN
    /*SET @openquery= 'SELECT * INTO ##TestTable
                     FROM OPENROWSET(''SQLNCLI'',''server=192.168.31.176;Trusted_Connection=yes;'','''+@query+''')'
    SET @openquery=  'CREATE VIEW '+@TABLENAME+@ETL_CONFIG_IDN+
                     ' WITH ENCRYPTION AS SELECT * FROM OPENROWSET(''SQLNCLI'',''SERVER='+@SERVERNAME+';TRUSTED_CONNECTION=YES;'',''SELECT * FROM '+@DATABASENAME+'.'+@HIERNAME+'.'+@TABLENAME+''')'
    SELECT @openquery
    END
    EXECUTE sp_executesql @openquery
    END

    Hi aa_rif,
    According to your description and code message, you execute the sp_executesql statement in your stored procedure, it indeed create many views with a tablename and ETL_CONFIG_ID named. If you need not to use these temporary views, you can delete them when
    it contains the tablename in one view name.  
    In addition, if you want to create view with encryption in SQL Server, you can use directly the ENCRYPTION option to encrypt the T-SQL of a view in create view commands, for more information, see:
    http://learnsqlserver.in/4/Create-View-With-Encryption.aspx. if not, you can descript more detail about requriements, so that more forum members can involve into the thread and help you
    out. 
    Regards,
    Sofiya Li
    Sofiya Li
    TechNet Community Support

  • Compiled Views not showing up in the Web Client

    Hi everyone,
    I'm new to Siebel Tools. I did a simple exercise of adding an existing view to an existing screen in Siebel Public Sector. I locked the project and added the view to the screen. I did a full compile afterwards (compiled all the objects).
    I ran Siebel Web Client using the SRF file that was generated (from the compilation process) and I connected to our Server database. I went to user preferences to activate the view with my login user but I could not find the view anywhere.
    The same thing happened when I created a new view and added it to an existing screen. I compiled and launched the web client. I went the Administration - Application > View to associate the view with a new responsibility but the view doesn't appear in view picklist.
    To test my sanity. I copied the SRF file to another machine into the Siebel Tools/Objects/ENU folder and ran Siebel Tools. To my dismay, I couldn't see the views that I just created. I thought I compiled the views (in fact I compiled everything!). Turns out that everything I just created doesn't seem to make it to the SRF file.
    Am I missing a step somewhere here? Any expert help would be valuable!
    Thanks,
    Bernhard

    Hi,
    The new view what you have created wont appear in the View Pick Applet. That doesnt means the view is not available in the compiled SRF. You can just copy the view name and create a new record in the View applet and paste the view name. The View name will get stored in the Administration - Views.
    Then add the responsibility of the user you wish to appear the view for the users. Then drilldown on the added responsibility and do a "Clear Cache" there. Log out and login again to verify the view in the appropriate screen.
    Regards,
    Joseph

  • How to create a view with parameters; read the documentation but nothing!

    Hello!
    I'm new to the Oracle world but together with my coworkers we need to very quickly study Oracle to figure out whether we'll add Oracle to our list of supported databases or not.
    Question: How do I create a view with parameters?
    I've read the documentation but I could not find this! I found the sql syntax to create a view but no parameters whatsoever...
    I have found on the web some very complicated way of doing this, but doesn't Oracle support Views with parameters?
    The goal here is to return a recordset, don't forget, so,please don't speak about stored procedures unless you are going to tell me how to get a recordset out of a stored procedure! ;)
    Thanks for all your help and attention!
    Jorge C.

    You can set up a parameterized view via context as follows:
    1. Set up a procedure to set your context values:
    create or replace procedure p_set_context (p_context IN VARCHAR2,p_param_name IN VARCHAR2,p_value IN VARCHAR2)
    as
    BEGIN
    sys.dbms_session.set_context(p_context,p_param_name,p_value);
    END;
    2. Create your context using the procedure you just created
    create or replace context my_ctx using p_set_context
    3. This is the test table I'll use
    create table my_table(col1 number)
    and populate it:
    begin
    for v_index in 1..10
    loop
    insert into my_table values(v_index);
    end loop;
    end;
    and the view that will be parameterised
    create or replace view v_my_table as select col1 from my_table where col1 between sys_context('my_ctx','start_range') and sys_context('my_ctx','end_range')
    4. Now set the parameters using the procedure above.
    begin
    p_set_context('my_ctx','start_range','1');
    p_set_context('my_ctx','end_range','5');
    end;
    5. Selecting from my_table will give you 1 to 10 (no surprise there :-) )
    selectng from v_my_table will give you 1 to 5
    You can use the context to set formats etc using the same principle. A common gotcha to watch for is trying to set the context directly using DBMS_SESSION.SET_CONTEXT instead of creating a procedure. This belongs to SYS and SYS won't have the privileges to set your context so you get an insufficient privileges result leading to much headscratching and unnecessary grants (at least that's my understanding of it).
    Sorry Jorge, as you're new to Oracle I should also have pointed out for completeness sake, that you can change the parameters at any time through recalling the p_set_context, for example, following on from above, after your "select * from v_my_table" and seeing 1 to 5, you could then do
    begin
    p_set_context('my_ctx','start_range','3');
    end;
    and when you requery 'Select * from v_my_table' you will now see rows 3 to 5.
    Bit of a simplistic example, but you can see how easy it is. :-)
    Message was edited by:
    ian512

  • Create Materialized View with Compress clause

    Hi,
    Oracle 9i R2 has an option to use compress clause while creating table, materialized view or etc. Just wanted some help on tips to be followed during creating a materilized view with compress clause and refresh the same.do i need to follow any special procedures ??? Any help greatly appreciated.
    Thanks,
    Chak.

    I read in the book that while inserting user /+append+/ otherwise table with compress will fail. I am doing materialized view refresh with fast mode and data will be inserted as per logs residing at master site.. while inserting into materialized view, do i have to setup specially since fast refresh is going to insert data into existing materialized view.
    Thanks,

Maybe you are looking for

  • No longer able to build ejb using appc (WLS 8.1)

    I'm in the process of re-writing some build files to make use of the new appc compiler, but I started to get a rather confusing error. Although the EJB builds (using ejbc) and deploys fine on WLS 7, when I try to build using appc I get a slew of mess

  • Get Selection options from one view to another view

    Hi Experts, I am using two views, first view  it shows basic list of records based on selection options criteria , here I used component WDR_SELECT_OPTIONS . Then if we click on any record in first view then it opens popup window with record relevant

  • Can't use CAN2 on PXI-8513/2

    I am using NI-XNET CAN in a VeriStand model running on "NI Real-Time Phar Lap ETS 13.1" (inherited project).  It is currently working using CAN1 configured as 'Frame Out Stream' but fails when I try to use CAN2 instead.  The error code (as far as I c

  • Difference between Oracle Testing ID and enrollment number

    hi all. I intend to submit my hand-on course form buy i am confused about what to use in the place for 'Enrollment number'. Please i need clarification. Is the enrolloment number same as the Oracle Testing ID or not. I am pursuin OCP 11g. Thanks in a

  • Exchange server 2013

    Hi, we had purchase Exchange server 2013 Volume license in MSDN subscription and going to implement. I need some Information. 1.How many Domains we can use? 2.How many Email ID we can use? 3.What is charge for Renewal Exchange server License? Let me