DECODE - flipping Table axes

Hi,
To obtain this unique row:
CUSTOMER   SUBSCRIPTION_A   SUBSCRIPTION_B    SUBSCRIPTION_C
J. Smith                       01-JUN-2002       01-JUN-2002from this set of multiple rows:
CUSTOMER   SUBSCRIPTION_TYPE   BEGIN_DATE
J.Smith                    B   01-JUN-2002 
J.Smith                    C   01-JUN-2002I'm using this artefact:
SELECT
customer,
MAX(DECODE(subscription_type, 'A', begin_date)),
MAX(DECODE(subscription_type, 'B', begin_date)),
MAX(DECODE(subscription_type, 'C', begin_date))
FROM customer, subscriptions
WHERE customer.customer = subscriptions.customer
GROUP BY customerThe solely purpose of the MAX function here (one might be puzzled to see it here)is its side effect: flattening the otherwise multiple rows returned set, into a unique, has-it-all row by customer.
This is often described as "flipping table axes" (vertical to horizontal), though the Oracle 8 Reference book covers only half of the way: provides no information as how to obtain this single row.
My questions:
- is there another syntax for the same functional result?
- if so how does it compare in terms of performances?
Thank You!
JRoch

One little change in your SQL above,
When you DECODE the subscription_type(type), IF the type is 'A' then do some thing, else do NOTHING(NULL) to get the expected results. So a small tweak to your code,
SELECT
cust.customer,
MAX(DECODE(sub.type, 'A', sub.begin_date, NULL)),
MAX(DECODE(sub.type, 'B', sub.begin_date, NULL)),
MAX(DECODE(sub.type, 'C', sub.begin_date, NULL))
FROM customer cust, subscriptions sub
WHERE cust.customer = sub.customer
GROUP BY cust.customer;Now, the alternative for this logic would be PL/SQL. If you do not know the number of rows ahead of time, PL/SQL would be the only option in fact. In this query, we are assuming that we can get a maximun of three rows, one for each TYPE. In that case, performance is SQL versus PL/SQL, my personal choice is SQL as it is advised by many Oracle experts.
Also, you could use SUM() versus MAX() if the decode is on the amounts, that should slightly improve the performance. Basic thing here is, we need to use an aggregate function in order to group the rows and flip them into columns.
I will be interested to see any other SQL logic for this spec. Thanks,
SriDHAR

Similar Messages

  • Flipping Tables

    I have a table that has many rows, and I need to flip it
    upside down. What I mean by that, is that I want to take a table
    like this: (the one I really need to switch is much longer)
    http://upload3.postimage.org/342361/photo_hosting.html
    and make it go from bottom to top, like 10,9,8,7,6,5,4,3,2,1.
    Is there a way I can do this without cutting and pasting each row
    manually?

    There is no way to do something like this within Dreamweaver.
    Perhaps you
    could invert the table by taking it into Excel, and then
    exporting it as a
    CSV file back into DW.
    Murray --- ICQ 71997575
    Adobe Community Expert
    (If you *MUST* email me, don't LAUGH when you do so!)
    ==================
    http://www.dreamweavermx-templates.com
    - Template Triage!
    http://www.projectseven.com/go
    - DW FAQs, Tutorials & Resources
    http://www.dwfaq.com - DW FAQs,
    Tutorials & Resources
    http://www.macromedia.com/support/search/
    - Macromedia (MM) Technotes
    ==================
    "AFJ786" <[email protected]> wrote in
    message
    news:fdo2fv$ckn$[email protected]..
    >I have a table that has many rows, and I need to switch
    it upside down.
    >What I
    > mean by that, is that I want to take a table like this:
    (the one I really
    > need
    > to switch is much longer)
    >
    http://upload3.postimage.org/342361/photo_hosting.html
    >
    > and make it go from bottom to top, like
    10,9,8,7,6,5,4,3,2,1. Is there a
    > way I
    > can do this without cutting and pasting each row
    manually?
    >

  • Encoding and decoding of tables data

    Hi,
    I need to encode the values in the fields of the data base table and again i need to put the encoded data into that data base table back and i need to decode the data base table back.
    Are there any fm's for this?
    Please suggest me a approch of doing this.
    Thanks in advance,
    Radhika

    Hi Francois,
    I checked the methods in the class CL_HARD_WIRED_ENCRYPTOR.
    But, in my case the ecrypted and decrypted data lengths should be same,
    bcoz after encrypted that data should fit into that particular field of the same table.
    I did not found any method for this case in the above class.
    Thanks,
    Radhika

  • XML and tables in InDesign

    Hi everyone,
    I'm just starting to explore the possibilities of XML in InDesign and in need of some general information:
    The projects that I'm working with that I think would benefit from the XML workflow are files that include a number of tables (e.g., product names, descriptions, prices, etc. with header rows and some merged cells).
    The content of the tables are the same for a brochure-style layout and a poster-style layout but the brochure tables need to be tall and narrow and the poster tables short and wide (basically flipping the axes). So far I've handled this through a complicated dance of exporting the tables as text and using Excel to flip the axes and then import the tables back into InDesign (in order for this to work, I have to un-merge all merged cells and it still isn't perfect but a reasonable starting point).
    The editors make changes to the content in InDesign using InCopy (adding or removing rows or columns to add new products and/or prices, etc.)
    The poster and brochure versions of the file don't need to be live at the same time--they're used at different times of the year so it's a matter of loading the final brochure content into the poster then making any changes to the poster and 6 months later importing the final poster content into the brochure. And the cycle continues.
    Would XML handle well? The little I've read so far about XML and tables indicates that each cell would need to be tagged. This could easily result in mis-tagging a cell which would screw up the content import, right? I'm talking about hundreds (thousands?) of cells.
    And since the structure of the table would be changing due to adding/removing rows/columns, it seems I would need to tag each cell of the tables every time I wanted to import content.
    Am I understanding all this correctly?
    Thanks for your input.

    Hi
    You are right each cell nee to be tagged in XML tables, if you are working with more than hundreds/thousands of cells, be careful in content tagging. adding/removing columns/rows would really affect the structure of the XML and if it need to extract/export the content the structure of XML will not be correct. It is better to avoid XML tables in case of adding/removing columns/rows.

  • Help with Decode function

    Hello!!
    Can anyone please help me with the decode statement
    Table 1 Table2 Table3
    Id Id Code
    Volume Code
    For each of the codes in Table3 I need to find the corresponding Volume. Can I use decode in the select statement to this,
    Eg Code Volume
    ABC 20
    XYZ 10 etc etc.
    Thankyou all in advance.

    Your table structure is a little unclear from your post. I am assuming that what you posted was:
    Table 1
    Id
    Table2
    Id
    Code
    Table3
    Volume
    Code You can use decode if there are only a few values for table3. For example,
    SELECT table2.code,
    DECODE(table2.code,'ABC',10,'XYZ',20,'UNKNOWN') volume
    FROM table2
    or even
    SELECT code,DECODE(code,null,'NONE',
                      (SELECT volume FROM table3 where code=table2.code)) volume
    FROM table2However, the first will break, or at least be incorrect, if anyone adds a new code/volume pair, and is tedious if you have more than a few values. The second will likely be pretty slow if there are a large number of records in table3. The best solution would be to use a simple join rather than decode. Something like:
    SELECT table1.id, table2.code, table3.volume
    FROM table1, table2, table3
    WHERE table1.id = table2.id and
          table2.code = table3.code

  • Creating synonys for all table

    i want to create synonyms for all atbles.the synonyn name and table name are same.instead creating one by one synonym i wnat to create all synonyms at a time.
    1)select 'CREATE PUBLIC SYNONYM'||' '||'test'||' '||'for' ||' '||'test' from dual
    2)select OBJECT_NAME from user_objects where OBJECT_TYPE ='TABLE'
    in the first query if we replace with test with 2nd query then we can get the script for that.
    i replaced that biut its not working how to do it

    Here is a generic grant script. If you review it, you will see how it works and can adapt it to your varying needs.
    BEGIN
        FOR x IN ( SELECT owner,
                          object_name,
                          DECODE(object_type, 'TABLE' ,   'select, insert, update, delete',
                                              'SEQUENCE', 'select',
                                              'VIEW',     'select',
                                                          'execute') AS privs,
                          DECODE (owner, 'SCHEMA_1', 'USER_1',
                                         'SCHEMA_2', 'ROLE_A'
                                          ) AS app_user
                     FROM dba_objects
                    WHERE object_type IN ('TABLE',    'PACKAGE', 'PROCEDURE',
                                          'FUNCTION', 'SEQUENCE', 'VIEW')
                      AND owner       IN ('SCHEMA_1', 'SCHEMA_2' ))
        LOOP
          BEGIN
            EXECUTE IMMEDIATE 'grant ' || x.privs       || ' on ' || x.owner ||
                              '.'      || x.object_name || ' to ' || x.app_user   ;
            EXECUTE IMMEDIATE 'create or replace synonym '|| x.app_user||'.'||x.object_name||
                               ' for ' ||x.owner||'.'||x.object_name ;
          EXCEPTION
            WHEN others THEN
              dbms_output.put_line('Bad owner = '||x.owner||';  Bad app_user='||x.app_user||
                                   ';  Bad object_name='||x.object_name);
          END;
        END LOOP;
    END;
    /

  • Available or Unavailable

    Hello
    Here are the message which may be delivered when Numbers import from XL or export to XL.
    So, you will be aware of a lot of plus and minus.
    "All Drawings from the Sheet"
    A chart whose data couldn’t be found was converted to an image.
    A chart whose data couldn’t be read was converted to an image.
    A chart with too many data points (%d) was converted to an image.
    A column too large for Excel was resized. Shapes and charts might look different.
    A row too large for Excel was resized. Shapes and charts might look different.
    A scatter chart was plotted by column. The chart was imported, but can’t be edited.
    A shape was removed because it wasn’t within the worksheet’s bounds.
    A shape was repositioned so that it is within the worksheet’s bounds.
    A worksheet’s background was removed.
    Accounting number formatting was converted to Excel accounting format.
    An unsupported number format wasn’t imported.
    An unsupported worksheet wasn’t imported
    Area charts will appear different because the series order was reversed.
    Bar charts will appear different because the series order was reversed.
    Bubble charts aren’t supported and were converted to images.
    Bubble charts aren’t supported and were removed.
    Bullets were removed from bulleted text.
    Can’t import more than 255 columns. Additional columns were removed.
    Can’t import more than 65,533 rows. Additional rows were removed.
    Cells in a hidden column or row were unhidden to show merged cells.
    Change tracking isn’t supported. All changes were accepted.
    Chart axes were moved to cross at chart corners. Chart “%@” will look different.
    Chart axes were moved to cross at chart corners. Your charts might look different.
    Chart references to external data aren’t supported and the last values were imported.
    Chart references to external data aren’t supported. The last data values weren’t available, so the chart was removed.
    Chart titles longer than 100 characters aren’t supported and were truncated.
    Charts with error bars or trendlines were converted to charts without error bars or trendlines.
    Charts with no data aren’t supported and were removed.
    Checkboxes aren’t supported in Excel. Selected checkboxes were replaced with True, and unselected checkboxes were replaced with False.
    Choosing to exclude objects from printing isn’t supported.
    Color gradients in tables might look different.
    Comment print settings aren’t supported and were removed. Visible comments will print.
    Content in %1$i cells in table “%2$@” was truncated because it’s too long for Excel.
    Couldn’t export a cell’s conditional formatting because it exceeded Excel’s three-rule maximum.
    Couldn’t export category axis labels.
    Couldn’t export date and time formatting in headers and footers.
    Couldn’t export date/time, page number, and page count fields inside cells because Excel doesn’t support them; the cell values were converted to text.
    Couldn’t export gradient fills because they’re not supported in Excel. The first color was used instead
    Couldn’t export hyperlinks outside table cells.
    Couldn’t export image fills because Excel doesn’t support them.
    Couldn’t export pop-up menus because they aren’t supported in Excel; the cell values were exported.
    Couldn’t export shadow on text in charts.
    Couldn’t export sliders because they aren’t supported in Excel; the cell values were exported.
    Couldn’t export stepper controls because they aren’t supported. The cell value was retained.
    Custom worksheet views aren’t supported and were removed.
    Data in hidden cells will be used in charts.
    Data in hidden cells won’t be used in charts.
    Data tables aren’t supported and were imported as regular table cells.
    Data validation isn’t supported and was removed. The last cell values were imported.
    Date and time values can’t be used in charts. Charts containing dates and times were removed.
    Dates before 1904 were converted to text because Excel doesn’t support them.
    Diagonal borders aren’t supported and were removed.
    Filename fields aren’t supported in headers or footers and were removed.
    Fill opacities were set to 100%.
    Filtered cells might have been imported as hidden. To show them, choose Table > Unhide All Rows and Unhide All Columns.
    Filtered table cells were exported hidden.
    Fit to Page isn’t supported and the setting was removed.
    Fonts with shadows might look different because Excel doesn’t support font shadow options.
    Form controls such as checkboxes and scroll bars were removed.
    Formulas in %1$i cells were removed from “%2$@” because they aren’t supported.
    Graphics aren’t supported in headers or footers and were removed.
    Header and footer cells were exported as body cells but will look the same.
    Header/footer content was truncated because it’s too long for Excel.
    Hidden worksheets were made visible.
    Hyperlinks in cells that don’t contain text weren’t imported.
    Hyperlinks on shapes aren’t supported and were removed.
    Hyperlinks within workbooks and hyperlinks to other files aren’t supported and were removed.
    Indents in table cells were imported but aren’t editable.
    Invalid charts were removed.
    Line charts with data points connected by smooth lines aren’t supported. The smoothed line setting was removed.
    Major and minor axis range units were recalculated and your charts might look different.
    Minimum and maximum axis values were recalculated and your charts might look different.
    Mixed-type charts aren’t supported. Chart “%1$@” was imported as %2$@ chart.
    More than one hyperlink was found in a cell. Only the first one was exported.
    Multicolumn text was exported as one column.
    Non-linear gradient table cell fills aren’t supported and were imported as regular gradient fills.
    None of the types of worksheets in the document are supported.
    Part of a header or footer corrupt. The readable portion was imported.
    Password protection was removed from a worksheet.
    Pathname fields aren’t supported in headers or footers and were removed.
    Pivot tables aren’t supported and were converted to regular tables.
    Pop-up lists in cells weren’t imported. The last value of the cell was used.
    Pop-up lists were removed. The last value was used.
    Print area isn’t supported and the setting was removed.
    Print settings for row and column titles aren’t supported and were removed.
    Radar charts aren’t supported and were converted to images.
    Radar charts aren’t supported and were removed.
    References to external data aren’t supported and were removed. The last calculated value was used.
    Reports aren’t supported and were removed.
    Rotated or flipped tables were returned to their original orientation because Excel doesn’t support rotating or flipping tables.
    Row or column outlines aren’t supported and were removed.
    Scatter charts plotted by column were imported but chart data can’t be edited.
    Scatter plot charts with data points connected by lines were converted to ones without connecting lines.
    Scenarios aren’t supported and were removed.
    Secondary chart axes aren’t supported and were removed.
    Some cells weren’t imported because the worksheet was too large.
    Some chart data might not have imported correctly.
    Sorting criteria were removed.
    Stock high-low-close charts aren’t supported and were converted to line charts.
    Stock open-high-low-close charts aren’t supported and were converted to line charts.
    Stock volume-high-low-close charts aren’t supported and were converted to column charts.
    Stock volume-open-high-low-close charts aren’t supported and were converted to column charts.
    Surface charts aren’t supported and were converted to images.
    Surface charts aren’t supported and were removed.
    Tab stops in table cells were replaced using four spaces.
    Table names were hidden because Excel doesn’t support displaying them on the canvas.
    The document can’t be opened because it’s not a valid Excel file.
    The document contains more colors than Excel supports; some colors may look different.
    The document is encrypted and can’t be opened.
    The document was created with an unsupported version of Excel.
    The formula could not be exported.
    The setting to reverse category order on the axis isn’t supported and was removed.
    The setting to view formulas isn’t supported and was removed.
    This document was exported from Numbers '08. Each table was converted to an Excel worksheet.
    Unsupported border styles were mapped to solid borders.
    Unsupported conditional formatting on %1$i cells was removed from %2$@ on “%3$@.”
    Unsupported conditional formatting was removed.
    Unsupported error values in %1$i cells were removed from %2$@ on “%3$@.”
    Unsupported formulas in %1$i cells were removed from %2$@ on “%3$@.” The last calculated value was used.
    Unsupported number formatting on %1$i cells was removed from %2$@ on “%3$@.”
    Unsupported orthographic camera view was converted to perspective.>
    Yvan KOENIG (from FRANCE mercredi 13 février 2008 12:48:37)

    1. No, but you might be able to upgrade to Lion. Choose About this Mac from the Apple menu, check that the computer has at least a Core 2 Duo(not Core Duo) CPU, and if so, click here.
    2. Check the RAM from the About this Mac window, choose Computer from the Finder's Go menu, control-click the internal drive, and choose Get Info. If the computer has a 32-bit EFI, it can't be upgraded to Mountain Lion or above regardless of the RAM and free drive space.
    (111990)

  • IN values in a PL/SQL procedure

    Hi Experts,
    Please can someone help me with this procedure ? I am trying to write this procedure that I can use to grant privileges dynamically to roles based on the argument.
    I am getting the errors while creating it as it fails to assign the values in the CASE statement based on the IN arguments.
    CREATE OR REPLACE PROCEDURE GENERATE_GRANTS (OWNNAME IN VARCHAR2, ROLENAME IN VARCHAR2, OP_TYPE VARCHAR2)
    AS
    SQL_STATEMENT      VARCHAR2 (200);
    err_code      number(10);
    err_msg      VARCHAR2(200);
    OBJTYPES      VARCHAR2(200);
    BEGIN
    CASE OP_TYPE
    WHEN 'READ'           THEN OBJTYPES := ( 'TABLE', 'VIEW');
    WHEN 'READWRITE'      THEN OBJTYPES := ( 'TABLE', 'VIEW', 'SEQUENCE', 'PROCEDURE', 'PACKAGE','FUNCTION' );
    END CASE;
    FOR ITEM IN (SELECT (
         decode(
         object_type,
         'TABLE','GRANT SELECT, INSERT, UPDATE, DELETE ON '|| OWNNAME ||'.',
         'VIEW','GRANT SELECT ON '||  OWNNAME ||'.',
         'SEQUENCE','GRANT SELECT ON '|| OWNNAME ||'.',
         'PROCEDURE','GRANT EXECUTE ON '|| OWNNAME ||'.',
         'PACKAGE','GRANT EXECUTE ON '|| OWNNAME ||'.',
         'FUNCTION','GRANT EXECUTE ON'|| OWNNAME ||'.' )||object_name||' TO '||ROLENAME
         ) as GRANT_SQL
         FROM dba_objects
         WHERE OWNER = OWNNAME
         AND OBJECT_TYPE IN OBJTYPES     
         ORDER BY OBJECT_TYPE)
    LOOP
    SQL_STATEMENT := ITEM.GRANT_SQL;
    BEGIN
    EXECUTE IMMEDIATE SQL_STATEMENT;
    EXCEPTION
    WHEN OTHERS
    THEN -- handles all other errors
    err_code := SQLCODE;
    err_msg := substr(SQLERRM, 1, 200);
    DBMS_OUTPUT.PUT_LINE (SQL_STATEMENT);
    DBMS_OUTPUT.PUT_LINE (err_code || ' ' || err_msg);
    END;
    END LOOP;
    END;
    /

    a) Your CASE statement has wrong syntax.
    b) In order to use OBJECTTYPES the way you wanted would require dynamic SQL.
    Use this instead:
    CREATE OR REPLACE
      PROCEDURE GENERATE_GRANTS(
                                OWNNAME IN VARCHAR2,
                                ROLENAME IN VARCHAR2,
                                OP_TYPE VARCHAR2
        AS
        BEGIN
            FOR ITEM IN (
                         SELECT  decode(
                                        object_type,
                                        'TABLE','GRANT SELECT, INSERT, UPDATE, DELETE ON '|| OWNNAME ||'.',
                                        'VIEW','GRANT SELECT ON '||  OWNNAME ||'.',
                                        'SEQUENCE','GRANT SELECT ON '|| OWNNAME ||'.',
                                        'PROCEDURE','GRANT EXECUTE ON '|| OWNNAME ||'.',
                                        'PACKAGE','GRANT EXECUTE ON '|| OWNNAME ||'.',
                                        'FUNCTION','GRANT EXECUTE ON'|| OWNNAME ||'.'
                                       ) || object_name || ' TO '||ROLENAME AS GRANT_SQL
                           FROM  dba_objects
                           WHERE OWNER = OWNNAME
                           AND 1 = CASE
                                     WHEN OP_TYPE = 'READ' AND OBJECT_TYPE IN ('TABLE','VIEW') THEN 1
                                     WHEN OP_TYPE = 'READWRITE' AND OBJECT_TYPE IN ('TABLE','VIEW','SEQUENCE','PROCEDURE','PACKAGE','FUNCTION') THEN 1
                                   END
                           ORDER BY OBJECT_TYPE
              LOOP
                BEGIN
                    EXECUTE IMMEDIATE ITEM.GRANT_SQL;
                  EXCEPTION
                    WHEN OTHERS
                      THEN -- handles all other errors
                        DBMS_OUTPUT.PUT_LINE (ITEM.GRANT_SQL);
                        DBMS_OUTPUT.PUT_LINE (SQLCODE || ' ' || substr(SQLERRM, 1, 200));
                END;
            END LOOP;
    END;
    /SY.

  • Sql Query is running fine in one database but running from long in other

    Hi All,
    Please advice me on below:
    One query is running fine on 11gr2 database with having 2GB SGA and cost of the running query is 15, but the same query is running from long time in other database having same 2GB SGA.
    Below is teh Query:
    SELECT CDU.USER_NAME, DECODE(:B2 , 'QUEUE','begin
    dbms_aqadm.grant_queue_privilege(''ALL'','''||:B1
    ||''','''||CDU.USER_NAME||''',true); end;', 'grant '||DECODE(:B2 ,
    'TABLE','SELECT,INSERT,UPDATE,DELETE'||DECODE(CDU.ADMIN,'Y',',REFERENCES
    ',''), 'VIEW',DECODE(:B3 ,NULL,'SELECT','SELECT,INSERT,UPDATE,DELETE'||D
    ECODE(CDU.ADMIN,'Y',',REFERENCES','')), 'TYPE','EXECUTE',
    'SEQUENCE','SELECT', 'EXECUTE')||' on
    '||PACK_UTILS.GET_SCHEMA_OWNER||'.'||:B1 ||' to
    "'||CDU.USER_NAME||'"'||DECODE(CDU.ADMIN,'Y',' WITH GRANT OPTION',''))
    AS GRANT_SOURCE, 'create or replace synonym
    "'||CDU.USER_NAME||'"."'||:B1 ||'" for
    "'||PACK_UTILS.GET_SCHEMA_OWNER||'"."'||:B1 ||'"' AS SYNONYM_SOURCE,
    NVL2( S.TABLE_NAME, 'Y', 'N' ) SYNONYM_EXISTS FROM CD_USERS CDU,
    ALL_SYNONYMS S, ALL_USERS U WHERE :B2 IN
    ('TYPE','TABLE','VIEW','FUNCTION','PROCEDURE','PACKAGE','SEQUENCE','QUEU
    E','SYNONYM') AND CDU.USER_TYPE = 'S' AND CDU.USER_NAME = U.USERNAME
    AND CDU.USER_NAME = S.OWNER AND :B1 = S.TABLE_NAME
    Please advise me as application team is chasing me like anything. what I can find out is that Cost is different in both databases.

    Sorry forr Late reply friends..
    below are the Explian plans for both databases:
                                                      BAD database
    PLAN_TABLE_OUTPUT
    SQL_ID  3bp3rynsds42r, child number 0
    SELECT CDU.USER_NAME, DECODE(:B2 , 'QUEUE','begin
    dbms_aqadm.grant_queue_privilege(''ALL'','''||:B1
    ||''','''||CDU.USER_NAME||''',true); end;', 'grant '||DECODE(:B2 ,
    'TABLE','SELECT,INSERT,UPDATE,DELETE'||DECODE(CDU.ADMIN,'Y',',REFERENCES
    ',''), 'VIEW',DECODE(:B3 ,NULL,'SELECT','SELECT,INSERT,UPDATE,DELETE'||D
    ECODE(CDU.ADMIN,'Y',',REFERENCES','')), 'TYPE','EXECUTE',
    'SEQUENCE','SELECT', 'EXECUTE')||' on
    '||PACK_UTILS.GET_SCHEMA_OWNER||'.'||:B1 ||' to
    "'||CDU.USER_NAME||'"'||DECODE(CDU.ADMIN,'Y',' WITH GRANT OPTION',''))
    PLAN_TABLE_OUTPUT
    AS GRANT_SOURCE, 'create or replace synonym
    "'||CDU.USER_NAME||'"."'||:B1 ||'" for
    "'||PACK_UTILS.GET_SCHEMA_OWNER||'"."'||:B1 ||'"' AS SYNONYM_SOURCE,
    NVL2( S.TABLE_NAME, 'Y', 'N' ) SYNONYM_EXISTS FROM CD_USERS CDU,
    ALL_SYNONYMS S, ALL_USERS U WHERE :B2 IN
    ('TYPE','TABLE','VIEW','FUNCTION','PROCEDURE','PACKAGE','SEQUENCE','QUEU
    E','SYNONYM') AND CDU.USER_TYPE = 'S' AND CDU.USER_NAME = U.USERNAME
    AND CDU.USER_NAME = S.OWNER AND :B1 = S.TABLE_NAME
    Plan hash value: 2404940060
    PLAN_TABLE_OUTPUT
    | Id  | Operation                                            | Name               | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT                                     |                    |       |       |       |    94 (100)|          |
    |*  1 |  FILTER                                              |                    |       |       |       |            |          |
    |*  2 |   HASH JOIN                                          |                    |    81 |  6723 |       |    94   (0)| 00:00:01 |
    |   3 |    NESTED LOOPS OUTER                                |                    |    81 |  6480 |       |    91   (0)| 00:00:01 |
    |*  4 |     HASH JOIN                                        |                    |    81 |  3726 |       |    10   (0)| 00:00:01 |
    |*  5 |      HASH JOIN                                       |                    |   137 |  3699 |       |     7   (0)| 00:00:01 |
    |   6 |       TABLE ACCESS FULL                              | TS$                |     7 |    21 |       |     3   (0)| 00:00:01 |
    |*  7 |       TABLE ACCESS FULL                              | USER$              |   137 |  3288 |       |     4   (0)| 00:00:01 |
    PLAN_TABLE_OUTPUT
    |*  8 |      TABLE ACCESS FULL                               | CD_USERS           |    82 |  1558 |       |     3   (0)| 00:00:01 |
    |   9 |     VIEW                                             | ALL_SYNONYMS       |     1 |    34 |       |     1   (0)| 00:00:01 |
    |  10 |      SORT UNIQUE                                     |                    |       |       |       |            |          |
    |  11 |       UNION-ALL PARTITION                            |                    |       |       |       |            |          |
    |* 12 |        FILTER                                        |                    |       |       |       |            |          |
    |  13 |         NESTED LOOPS                                 |                    |     1 |   116 |       |    60   (0)| 00:00:01 |
    |  14 |          NESTED LOOPS                                |                    |     1 |    94 |       |    59   (0)| 00:00:01 |
    |  15 |           NESTED LOOPS                               |                    |    12 |   684 |       |    23   (0)| 00:00:01 |
    |  16 |            TABLE ACCESS BY INDEX ROWID               | USER$              |     1 |    19 |       |     1   (0)| 00:00:01 |
    |* 17 |             INDEX UNIQUE SCAN                        | I_USER1            |     1 |       |       |     0   (0)|          |
    |  18 |            TABLE ACCESS BY INDEX ROWID               | SYN$               |    12 |   456 |       |    22   (0)| 00:00:01 |
    PLAN_TABLE_OUTPUT
    |* 19 |             INDEX SKIP SCAN                          | I_SYN2             |    12 |       |       |    12   (0)| 00:00:01 |
    |* 20 |           TABLE ACCESS BY INDEX ROWID                | OBJ$               |     1 |    37 |       |     3   (0)| 00:00:01 |
    |* 21 |            INDEX RANGE SCAN                          | I_OBJ1             |     1 |       |       |     2   (0)| 00:00:01 |
    |* 22 |          INDEX RANGE SCAN                            | I_USER2            |     1 |    22 |       |     1   (0)| 00:00:01 |
    |* 23 |         FIXED TABLE FULL                             | X$KZSPR            |    17 |   119 |       |     0   (0)|          |
    |* 24 |         FILTER                                       |                    |       |       |       |            |          |
    |* 25 |          FILTER                                      |                    |       |       |       |            |          |
    |  26 |           NESTED LOOPS                               |                    |    27 |  2430 |       |     6   (0)| 00:00:01 |
    |  27 |            NESTED LOOPS                              |                    |     1 |    78 |       |     4   (0)| 00:00:01 |
    |  28 |             NESTED LOOPS                             |                    |     1 |    56 |       |     3   (0)| 00:00:01 |
    |  29 |              TABLE ACCESS BY INDEX ROWID             | USER$              |     1 |    19 |       |     1   (0)| 00:00:01 |
    PLAN_TABLE_OUTPUT
    |* 30 |               INDEX UNIQUE SCAN                      | I_USER1            |     1 |       |       |     0   (0)|          |
    |* 31 |              INDEX RANGE SCAN                        | I_OBJ5             |     1 |    37 |       |     2   (0)| 00:00:01 |
    |* 32 |             INDEX RANGE SCAN                         | I_USER2            |     1 |    22 |       |     1   (0)| 00:00:01 |
    |* 33 |            INDEX RANGE SCAN                          | I_OBJAUTH1         |    28 |   336 |       |     2   (0)| 00:00:01 |
    |* 34 |          FIXED TABLE FULL                            | X$KZSRO            |     1 |     3 |       |     0   (0)|          |
    |  35 |          NESTED LOOPS                                |                    |     1 |    30 |       |     3   (0)| 00:00:01 |
    |* 36 |           INDEX SKIP SCAN                            | I_USER2            |     1 |    20 |       |     1   (0)| 00:00:01 |
    |* 37 |           INDEX RANGE SCAN                           | I_OBJ4             |     1 |    10 |       |     2   (0)| 00:00:01 |
    |  38 |         NESTED LOOPS                                 |                    |     1 |    30 |       |     3   (0)| 00:00:01 |
    |* 39 |          INDEX SKIP SCAN                             | I_USER2            |     1 |    20 |       |     1   (0)| 00:00:01 |
    |* 40 |          INDEX RANGE SCAN                            | I_OBJ4             |     1 |    10 |       |     2   (0)| 00:00:01 |
    PLAN_TABLE_OUTPUT
    |* 41 |        FILTER                                        |                    |       |       |       |            |          |
    |  42 |         NESTED LOOPS                                 |                    |     1 |   129 |       |  4301   (2)| 00:00:39 |
    |  43 |          NESTED LOOPS                                |                    |     1 |   129 |       |  4301   (2)| 00:00:39 |
    |  44 |           NESTED LOOPS                               |                    |     1 |    91 |       |  4299   (2)| 00:00:39 |
    |  45 |            NESTED LOOPS                              |                    |     1 |    69 |       |  4298   (2)| 00:00:39 |
    |  46 |             NESTED LOOPS                             |                    |     2 |    64 |       |  4292   (2)| 00:00:39 |
    |  47 |              TABLE ACCESS BY INDEX ROWID             | USER$              |     1 |    19 |       |     1   (0)| 00:00:01 |
    |* 48 |               INDEX UNIQUE SCAN                      | I_USER1            |     1 |       |       |     0   (0)|          |
    |  49 |              VIEW                                    | _ALL_SYNONYMS_TREE |     2 |    26 |       |  4291   (2)| 00:00:39 |
    |* 50 |               CONNECT BY NO FILTERING WITH START-WITH|                    |       |       |       |            |          |
    |* 51 |                FILTER                                |                    |       |       |       |            |          |
    PLAN_TABLE_OUTPUT
    |* 52 |                 HASH JOIN                            |                    | 18370 |  2080K|       |  4291   (2)| 00:00:39 |
    |  53 |                  INDEX FULL SCAN                     | I_USER2            |   207 |  4554 |       |     1   (0)| 00:00:01 |
    |* 54 |                  HASH JOIN                           |                    | 18370 |  1686K|       |  4290   (2)| 00:00:39 |
    |  55 |                   TABLE ACCESS FULL                  | USER$              |   207 |  3933 |       |     4   (0)| 00:00:01 |
    |* 56 |                   HASH JOIN                          |                    |  2922K|   209M|    18M|  4269   (1)| 00:00:39 |
    |* 57 |                    INDEX FAST FULL SCAN              | I_OBJ2             |   387K|    13M|       |  1323   (1)| 00:00:12 |
    |  58 |                    TABLE ACCESS FULL                 | SYN$               |   400K|    14M|       |   566   (2)| 00:00:06 |
    |  59 |                 NESTED LOOPS                         |                    |     1 |    30 |       |     3   (0)| 00:00:01 |
    |* 60 |                  INDEX SKIP SCAN                     | I_USER2            |     1 |    20 |       |     1   (0)| 00:00:01 |
    |* 61 |                  INDEX RANGE SCAN                    | I_OBJ4             |     1 |    10 |       |     2   (0)| 00:00:01 |
    |* 62 |                FILTER                                |                    |       |       |       |            |          |
    PLAN_TABLE_OUTPUT
    |  63 |                 TABLE ACCESS BY INDEX ROWID          | SYN$               |     1 |    38 |       |     3   (0)| 00:00:01 |
    |* 64 |                  INDEX UNIQUE SCAN                   | I_SYN1             |     1 |       |       |     2   (0)| 00:00:01 |
    |* 65 |                 FILTER                               |                    |       |       |       |            |          |
    |* 66 |                  FILTER                              |                    |       |       |       |            |          |
    |  67 |                   NESTED LOOPS                       |                    |    27 |  2430 |       |     6   (0)| 00:00:01 |
    |  68 |                    NESTED LOOPS                      |                    |     1 |    78 |       |     4   (0)| 00:00:01 |
    |  69 |                     NESTED LOOPS                     |                    |     1 |    56 |       |     3   (0)| 00:00:01 |
    |  70 |                      TABLE ACCESS BY INDEX ROWID     | USER$              |     1 |    19 |       |     1   (0)| 00:00:01 |
    |* 71 |                       INDEX UNIQUE SCAN              | I_USER1            |     1 |       |       |     0   (0)|          |
    |* 72 |                      INDEX RANGE SCAN                | I_OBJ5             |     1 |    37 |       |     2   (0)| 00:00:01 |
    |* 73 |                     INDEX RANGE SCAN                 | I_USER2            |     1 |    22 |       |     1   (0)| 00:00:01 |
    PLAN_TABLE_OUTPUT
    |* 74 |                    INDEX RANGE SCAN                  | I_OBJAUTH1         |    28 |   336 |       |     2   (0)| 00:00:01 |
    |* 75 |                  FIXED TABLE FULL                    | X$KZSRO            |     1 |     3 |       |     0   (0)|          |
    |  76 |                  NESTED LOOPS                        |                    |     1 |    30 |       |     3   (0)| 00:00:01 |
    |* 77 |                   INDEX SKIP SCAN                    | I_USER2            |     1 |    20 |       |     1   (0)| 00:00:01 |
    |* 78 |                   INDEX RANGE SCAN                   | I_OBJ4             |     1 |    10 |       |     2   (0)| 00:00:01 |
    |* 79 |                 FIXED TABLE FULL                     | X$KZSPR            |    17 |   119 |       |     0   (0)|          |
    |* 80 |             TABLE ACCESS BY INDEX ROWID              | OBJ$               |     1 |    37 |       |     3   (0)| 00:00:01 |
    |* 81 |              INDEX RANGE SCAN                        | I_OBJ1             |     1 |       |       |     2   (0)| 00:00:01 |
    |* 82 |            INDEX RANGE SCAN                          | I_USER2            |     1 |    22 |       |     1   (0)| 00:00:01 |
    |* 83 |           INDEX UNIQUE SCAN                          | I_SYN1             |     1 |       |       |     1   (0)| 00:00:01 |
    |* 84 |          TABLE ACCESS BY INDEX ROWID                 | SYN$               |     1 |    38 |       |     2   (0)| 00:00:01 |
    PLAN_TABLE_OUTPUT
    |  85 |         NESTED LOOPS                                 |                    |     1 |    30 |       |     3   (0)| 00:00:01 |
    |* 86 |          INDEX SKIP SCAN                             | I_USER2            |     1 |    20 |       |     1   (0)| 00:00:01 |
    |* 87 |          INDEX RANGE SCAN                            | I_OBJ4             |     1 |    10 |       |     2   (0)| 00:00:01 |
    |  88 |    TABLE ACCESS FULL                                 | TS$                |     7 |    21 |       |     3   (0)| 00:00:01 |
    Predicate Information (identified by operation id):
       1 - filter((:B2='TYPE' OR :B2='TABLE' OR :B2='VIEW' OR :B2='FUNCTION' OR :B2='PROCEDURE' OR :B2='PACKAGE' OR
                  :B2='SEQUENCE' OR :B2='QUEUE' OR :B2='SYNONYM'))
    PLAN_TABLE_OUTPUT
       2 - access("U"."TEMPTS#"="TTS"."TS#")
       4 - access("CDU"."USER_NAME"="U"."NAME")
       5 - access("U"."DATATS#"="DTS"."TS#")
       7 - filter("U"."TYPE#"=1)
       8 - filter("CDU"."USER_TYPE"='S')
      12 - filter(((INTERNAL_FUNCTION("O"."SPARE3") OR ("S"."NODE" IS NULL AND  IS NOT NULL) OR  IS NOT NULL) AND
                  (("O"."TYPE#"<>4 AND "O"."TYPE#"<>5 AND "O"."TYPE#"<>7 AND "O"."TYPE#"<>8 AND "O"."TYPE#"<>9 AND "O"."TYPE#"<>10 AND
                  "O"."TYPE#"<>11 AND "O"."TYPE#"<>12 AND "O"."TYPE#"<>13 AND "O"."TYPE#"<>14 AND "O"."TYPE#"<>22 AND "O"."TYPE#"<>87 AND
                  "O"."TYPE#"<>88) OR BITAND("U"."SPARE1",16)=0 OR (SYS_CONTEXT('userenv','current_edition_name')='ORA$BASE' AND
                  "U"."TYPE#"<>2) OR ("U"."TYPE#"=2 AND "U"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id'))) OR  IS NOT
                  NULL)))
    PLAN_TABLE_OUTPUT
      17 - access("U"."NAME"="CDU"."USER_NAME")
      19 - access("S"."NAME"=:B1)
           filter("S"."NAME"=:B1)
      20 - filter("O"."SPARE3"="U"."USER#")
      21 - access("O"."OBJ#"="S"."OBJ#" AND "O"."TYPE#"=5)
           filter("O"."TYPE#"=5)
      22 - access("O"."OWNER#"="U"."USER#")
      23 - filter((((-"KZSPRPRV")=(-45) OR (-"KZSPRPRV")=(-47) OR (-"KZSPRPRV")=(-48) OR (-"KZSPRPRV")=(-49) OR
                  (-"KZSPRPRV")=(-50)) AND "INST_ID"=USERENV('INSTANCE')))
      24 - filter((("BA"."GRANTOR#"=USERENV('SCHEMAID') OR  IS NOT NULL) AND (("O"."TYPE#"<>4 AND "O"."TYPE#"<>5 AND
                  "O"."TYPE#"<>7 AND "O"."TYPE#"<>8 AND "O"."TYPE#"<>9 AND "O"."TYPE#"<>10 AND "O"."TYPE#"<>11 AND "O"."TYPE#"<>12 AND
    PLAN_TABLE_OUTPUT
                  "O"."TYPE#"<>13 AND "O"."TYPE#"<>14 AND "O"."TYPE#"<>22 AND "O"."TYPE#"<>87 AND "O"."TYPE#"<>88) OR
                  BITAND("U"."SPARE1",16)=0 OR (INTERNAL_FUNCTION("O"."TYPE#") AND
                  ((SYS_CONTEXT('userenv','current_edition_name')='ORA$BASE' AND "U"."TYPE#"<>2) OR ("U"."TYPE#"=2 AND
                  "U"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id'))) OR  IS NOT NULL)))))
      25 - filter(:B1 IS NULL)
      30 - access("BU"."NAME"=:B1)
      31 - access("BU"."USER#"="O"."SPARE3" AND "O"."NAME"=:B1)
      32 - access("O"."OWNER#"="U"."USER#")
      33 - access("BA"."OBJ#"="O"."OBJ#")
      34 - filter("KZSROROL"=:B1)
      36 - access("U2"."TYPE#"=2 AND "U2"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id')))
    PLAN_TABLE_OUTPUT
           filter(("U2"."TYPE#"=2 AND "U2"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id'))))
      37 - access("O2"."DATAOBJ#"=:B1 AND "O2"."TYPE#"=88 AND "O2"."OWNER#"="U2"."USER#")
      39 - access("U2"."TYPE#"=2 AND "U2"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id')))
           filter(("U2"."TYPE#"=2 AND "U2"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id'))))
      40 - access("O2"."DATAOBJ#"=:B1 AND "O2"."TYPE#"=88 AND "O2"."OWNER#"="U2"."USER#")
      41 - filter((("O"."TYPE#"<>4 AND "O"."TYPE#"<>5 AND "O"."TYPE#"<>7 AND "O"."TYPE#"<>8 AND "O"."TYPE#"<>9 AND
                  "O"."TYPE#"<>10 AND "O"."TYPE#"<>11 AND "O"."TYPE#"<>12 AND "O"."TYPE#"<>13 AND "O"."TYPE#"<>14 AND "O"."TYPE#"<>22 AND
                  "O"."TYPE#"<>87 AND "O"."TYPE#"<>88) OR BITAND("U"."SPARE1",16)=0 OR
                  (SYS_CONTEXT('userenv','current_edition_name')='ORA$BASE' AND "U"."TYPE#"<>2) OR ("U"."TYPE#"=2 AND
                  "U"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id'))) OR  IS NOT NULL))
      48 - access("U"."NAME"="CDU"."USER_NAME")
    PLAN_TABLE_OUTPUT
      50 - access("S"."BASE_SYN_ID"=PRIOR NULL)
           filter( IS NOT NULL)
      51 - filter((("O"."TYPE#"<>4 AND "O"."TYPE#"<>5 AND "O"."TYPE#"<>7 AND "O"."TYPE#"<>8 AND "O"."TYPE#"<>9 AND
                  "O"."TYPE#"<>10 AND "O"."TYPE#"<>11 AND "O"."TYPE#"<>12 AND "O"."TYPE#"<>13 AND "O"."TYPE#"<>14 AND "O"."TYPE#"<>22 AND
                  "O"."TYPE#"<>87 AND "O"."TYPE#"<>88) OR BITAND("U"."SPARE1",16)=0 OR
                  (SYS_CONTEXT('userenv','current_edition_name')='ORA$BASE' AND "U"."TYPE#"<>2) OR ("U"."TYPE#"=2 AND
                  "U"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id'))) OR  IS NOT NULL))
      52 - access("O"."OWNER#"="U"."USER#")
      54 - access("S"."OWNER"="BU"."NAME" AND "BU"."USER#"="O"."SPARE3")
      56 - access("S"."NAME"="O"."NAME")
      57 - filter("O"."TYPE#"=5)
    PLAN_TABLE_OUTPUT
      60 - access("U2"."TYPE#"=2 AND "U2"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id')))
           filter(("U2"."TYPE#"=2 AND "U2"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id'))))
      61 - access("O2"."DATAOBJ#"=:B1 AND "O2"."TYPE#"=88 AND "O2"."OWNER#"="U2"."USER#")
      62 - filter(( IS NOT NULL OR ("S"."NODE" IS NULL AND  IS NOT NULL)))
      64 - access("S"."OBJ#"=:B1)
      65 - filter((("BA"."GRANTOR#"=USERENV('SCHEMAID') OR  IS NOT NULL) AND (("O"."TYPE#"<>4 AND "O"."TYPE#"<>5 AND
                  "O"."TYPE#"<>7 AND "O"."TYPE#"<>8 AND "O"."TYPE#"<>9 AND "O"."TYPE#"<>10 AND "O"."TYPE#"<>11 AND "O"."TYPE#"<>12 AND
                  "O"."TYPE#"<>13 AND "O"."TYPE#"<>14 AND "O"."TYPE#"<>22 AND "O"."TYPE#"<>87 AND "O"."TYPE#"<>88) OR
                  BITAND("U"."SPARE1",16)=0 OR (INTERNAL_FUNCTION("O"."TYPE#") AND
                  ((SYS_CONTEXT('userenv','current_edition_name')='ORA$BASE' AND "U"."TYPE#"<>2) OR ("U"."TYPE#"=2 AND
                  "U"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id'))) OR  IS NOT NULL)))))
    PLAN_TABLE_OUTPUT
      66 - filter(:B1 IS NULL)
      71 - access("BU"."NAME"=:B1)
      72 - access("BU"."USER#"="O"."SPARE3" AND "O"."NAME"=:B1)
      73 - access("O"."OWNER#"="U"."USER#")
      74 - access("BA"."OBJ#"="O"."OBJ#")
      75 - filter("KZSROROL"=:B1)
      77 - access("U2"."TYPE#"=2 AND "U2"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id')))
           filter(("U2"."TYPE#"=2 AND "U2"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id'))))
      78 - access("O2"."DATAOBJ#"=:B1 AND "O2"."TYPE#"=88 AND "O2"."OWNER#"="U2"."USER#")
      79 - filter((((-"KZSPRPRV")=(-45) OR (-"KZSPRPRV")=(-47) OR (-"KZSPRPRV")=(-48) OR (-"KZSPRPRV")=(-49) OR
                  (-"KZSPRPRV")=(-50)) AND "INST_ID"=USERENV('INSTANCE')))
    PLAN_TABLE_OUTPUT
      80 - filter("O"."SPARE3"="U"."USER#")
      81 - access("O"."OBJ#"="ST"."SYN_ID" AND "O"."TYPE#"=5)
           filter("O"."TYPE#"=5)
      82 - access("O"."OWNER#"="U"."USER#")
      83 - access("S"."OBJ#"="ST"."SYN_ID")
           filter("O"."OBJ#"="S"."OBJ#")
      84 - filter("S"."NAME"=:B1)
      86 - access("U2"."TYPE#"=2 AND "U2"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id')))
           filter(("U2"."TYPE#"=2 AND "U2"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id'))))
      87 - access("O2"."DATAOBJ#"=:B1 AND "O2"."TYPE#"=88 AND "O2"."OWNER#"="U2"."USER#")
    209 rows selected
    ==============================================================================================
                                                                     Good one
    PLAN_TABLE_OUTPUT
    SQL_ID  3bp3rynsds42r, child number 0
    SELECT CDU.USER_NAME, DECODE(:B2 , 'QUEUE','begin
    dbms_aqadm.grant_queue_privilege(''ALL'','''||:B1
    ||''','''||CDU.USER_NAME||''',true); end;', 'grant '||DECODE(:B2 ,
    'TABLE','SELECT,INSERT,UPDATE,DELETE'||DECODE(CDU.ADMIN,'Y',',REFERENCES
    ',''), 'VIEW',DECODE(:B3 ,NULL,'SELECT','SELECT,INSERT,UPDATE,DELETE'||D
    ECODE(CDU.ADMIN,'Y',',REFERENCES','')), 'TYPE','EXECUTE',
    'SEQUENCE','SELECT', 'EXECUTE')||' on
    '||PACK_UTILS.GET_SCHEMA_OWNER||'.'||:B1 ||' to
    "'||CDU.USER_NAME||'"'||DECODE(CDU.ADMIN,'Y',' WITH GRANT OPTION',''))
    PLAN_TABLE_OUTPUT
    AS GRANT_SOURCE, 'create or replace synonym
    "'||CDU.USER_NAME||'"."'||:B1 ||'" for
    "'||PACK_UTILS.GET_SCHEMA_OWNER||'"."'||:B1 ||'"' AS SYNONYM_SOURCE,
    NVL2( S.TABLE_NAME, 'Y', 'N' ) SYNONYM_EXISTS FROM CD_USERS CDU,
    ALL_SYNONYMS S, ALL_USERS U WHERE :B2 IN
    ('TYPE','TABLE','VIEW','FUNCTION','PROCEDURE','PACKAGE','SEQUENCE','QUEU
    E','SYNONYM') AND CDU.USER_TYPE = 'S' AND CDU.USER_NAME = U.USERNAME
    AND CDU.USER_NAME = S.OWNER AND :B1 = S.TABLE_NAME
    Plan hash value: 2146531909
    PLAN_TABLE_OUTPUT
    | Id  | Operation                                          | Name               | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT                                   |                    |       |       |       |    15 (100)|          |
    |*  1 |  FILTER                                            |                    |       |       |       |            |          |
    |   2 |   NESTED LOOPS OUTER                               |                    |     3 |   273 |       |    15   (0)| 00:00:01 |
    |   3 |    NESTED LOOPS                                    |                    |     3 |   153 |       |    12   (0)| 00:00:01 |
    |   4 |     NESTED LOOPS                                   |                    |     3 |   144 |       |     9   (0)| 00:00:01 |
    |   5 |      NESTED LOOPS                                  |                    |     3 |   135 |       |     6   (0)| 00:00:01 |
    |*  6 |       TABLE ACCESS FULL                            | USER$              |    55 |  1375 |       |     4   (0)| 00:00:01 |
    |*  7 |       TABLE ACCESS BY INDEX ROWID                  | CD_USERS           |     1 |    20 |       |     1   (0)| 00:00:01 |
    PLAN_TABLE_OUTPUT
    |*  8 |        INDEX UNIQUE SCAN                           | I1_CD_USERS        |     1 |       |       |     0   (0)|          |
    |   9 |      TABLE ACCESS CLUSTER                          | TS$                |     1 |     3 |       |     1   (0)| 00:00:01 |
    |* 10 |       INDEX UNIQUE SCAN                            | I_TS#              |     1 |       |       |     0   (0)|          |
    |  11 |     TABLE ACCESS CLUSTER                           | TS$                |     1 |     3 |       |     1   (0)| 00:00:01 |
    |* 12 |      INDEX UNIQUE SCAN                             | I_TS#              |     1 |       |       |     0   (0)|          |
    |  13 |    VIEW                                            | ALL_SYNONYMS       |     1 |    40 |       |     1   (0)| 00:00:01 |
    |  14 |     SORT UNIQUE                                    |                    |       |       |       |            |          |
    |  15 |      UNION-ALL PARTITION                           |                    |       |       |       |            |          |
    |* 16 |       FILTER                                       |                    |       |       |       |            |          |
    |  17 |        NESTED LOOPS                                |                    |     1 |   116 |       |    19   (0)| 00:00:01 |
    |  18 |         NESTED LOOPS                               |                    |     1 |    94 |       |    18   (0)| 00:00:01 |
    PLAN_TABLE_OUTPUT
    |  19 |          NESTED LOOPS                              |                    |     1 |    56 |       |    15   (0)| 00:00:01 |
    |  20 |           TABLE ACCESS BY INDEX ROWID              | USER$              |     1 |    20 |       |     1   (0)| 00:00:01 |
    |* 21 |            INDEX UNIQUE SCAN                       | I_USER1            |     1 |       |       |     0   (0)|          |
    |  22 |           TABLE ACCESS BY INDEX ROWID              | SYN$               |     1 |    36 |       |    14   (0)| 00:00:01 |
    |* 23 |            INDEX SKIP SCAN                         | I_SYN2             |     1 |       |       |    12   (0)| 00:00:01 |
    |* 24 |          TABLE ACCESS BY INDEX ROWID               | OBJ$               |     1 |    38 |       |     3   (0)| 00:00:01 |
    |* 25 |           INDEX RANGE SCAN                         | I_OBJ1             |     1 |       |       |     2   (0)| 00:00:01 |
    |* 26 |         INDEX RANGE SCAN                           | I_USER2            |     1 |    22 |       |     1   (0)| 00:00:01 |
    |* 27 |        FIXED TABLE FULL                            | X$KZSPR            |    17 |   119 |       |     0   (0)|          |
    |* 28 |        FILTER                                      |                    |       |       |       |            |          |
    |* 29 |         FILTER                                     |                    |       |       |       |            |          |
    PLAN_TABLE_OUTPUT
    |  30 |          NESTED LOOPS                              |                    |     3 |   279 |       |     5   (0)| 00:00:01 |
    |  31 |           NESTED LOOPS                             |                    |     1 |    80 |       |     4   (0)| 00:00:01 |
    |  32 |            NESTED LOOPS                            |                    |     1 |    58 |       |     3   (0)| 00:00:01 |
    |  33 |             TABLE ACCESS BY INDEX ROWID            | USER$              |     1 |    20 |       |     1   (0)| 00:00:01 |
    |* 34 |              INDEX UNIQUE SCAN                     | I_USER1            |     1 |       |       |     0   (0)|          |
    |* 35 |             INDEX RANGE SCAN                       | I_OBJ5             |     1 |    38 |       |     2   (0)| 00:00:01 |
    |* 36 |            INDEX RANGE SCAN                        | I_USER2            |     1 |    22 |       |     1   (0)| 00:00:01 |
    |* 37 |           INDEX RANGE SCAN                         | I_OBJAUTH1         |     3 |    39 |       |     1   (0)| 00:00:01 |
    |* 38 |         FIXED TABLE FULL                           | X$KZSRO            |     1 |     3 |       |     0   (0)|          |
    |  39 |         NESTED LOOPS                               |                    |     1 |    32 |       |     3   (0)| 00:00:01 |
    |* 40 |          INDEX SKIP SCAN                           | I_USER2            |     1 |    20 |       |     1   (0)| 00:00:01 |
    PLAN_TABLE_OUTPUT
    |* 41 |          INDEX RANGE SCAN                          | I_OBJ4             |     1 |    12 |       |     2   (0)| 00:00:01 |
    |  42 |        NESTED LOOPS                                |                    |     1 |    32 |       |     3   (0)| 00:00:01 |
    |* 43 |         INDEX SKIP SCAN                            | I_USER2            |     1 |    20 |       |     1   (0)| 00:00:01 |
    |* 44 |         INDEX RANGE SCAN                           | I_OBJ4             |     1 |    12 |       |     2   (0)| 00:00:01 |
    |* 45 |       FILTER                                       |                    |       |       |       |            |          |
    |  46 |        NESTED LOOPS                                |                    |     1 |   129 |       |  1065   (1)| 00:00:13 |
    |  47 |         NESTED LOOPS                               |                    |     1 |   107 |       |  1064   (1)| 00:00:13 |
    |  48 |          NESTED LOOPS                              |                    |     1 |    69 |       |  1061   (1)| 00:00:13 |
    |  49 |           NESTED LOOPS                             |                    |     2 |    66 |       |  1059   (1)| 00:00:13 |
    |  50 |            TABLE ACCESS BY INDEX ROWID             | USER$              |     1 |    20 |       |     1   (0)| 00:00:01 |
    |* 51 |             INDEX UNIQUE SCAN                      | I_USER1            |     1 |       |       |     0   (0)|          |
    PLAN_TABLE_OUTPUT
    |  52 |            VIEW                                    | _ALL_SYNONYMS_TREE |     2 |    26 |       |  1058   (1)| 00:00:13 |
    |* 53 |             CONNECT BY NO FILTERING WITH START-WITH|                    |       |       |       |            |          |
    |* 54 |              FILTER                                |                    |       |       |       |            |          |
    |* 55 |               HASH JOIN                            |                    |   705 | 81780 |       |  1058   (1)| 00:00:13 |
    |  56 |                INDEX FULL SCAN                     | I_USER2            |   124 |  2728 |       |     1   (0)| 00:00:01 |
    |* 57 |                HASH JOIN                           |                    |   705 | 66270 |       |  1057   (1)| 00:00:13 |
    |  58 |                 TABLE ACCESS FULL                  | USER$              |   124 |  2480 |       |     4   (0)| 00:00:01 |
    |* 59 |                 HASH JOIN                          |                    | 66964 |  4839K|  2232K|  1052   (1)| 00:00:13 |
    |  60 |                  TABLE ACCESS FULL                 | SYN$               | 47615 |  1673K|       |    78   (2)| 00:00:01 |
    |* 61 |                  INDEX FAST FULL SCAN              | I_OBJ5             | 47862 |  1776K|       |   752   (1)| 00:00:10 |
    |  62 |               NESTED LOOPS                         |                    |     1 |    32 |       |     3   (0)| 00:00:01 |
    PLAN_TABLE_OUTPUT
    |* 63 |                INDEX SKIP SCAN                     | I_USER2            |     1 |    20 |       |     1   (0)| 00:00:01 |
    |* 64 |                INDEX RANGE SCAN                    | I_OBJ4             |     1 |    12 |       |     2   (0)| 00:00:01 |
    |* 65 |              FILTER                                |                    |       |       |       |            |          |
    |  66 |               TABLE ACCESS BY INDEX ROWID          | SYN$               |     1 |    36 |       |     2   (0)| 00:00:01 |
    |* 67 |                INDEX UNIQUE SCAN                   | I_SYN1             |     1 |       |       |     1   (0)| 00:00:01 |
    |* 68 |               FILTER                               |                    |       |       |       |            |          |
    |* 69 |                FILTER                              |                    |       |       |       |            |          |
    |  70 |                 NESTED LOOPS                       |                    |     3 |   279 |       |     5   (0)| 00:00:01 |
    |  71 |                  NESTED LOOPS                      |                    |     1 |    80 |       |     4   (0)| 00:00:01 |
    |  72 |                   NESTED LOOPS                     |                    |     1 |    58 |       |     3   (0)| 00:00:01 |
    |  73 |                    TABLE ACCESS BY INDEX ROWID     | USER$              |     1 |    20 |       |     1   (0)| 00:00:01 |
    PLAN_TABLE_OUTPUT
    |* 74 |                     INDEX UNIQUE SCAN              | I_USER1            |     1 |       |       |     0   (0)|          |
    |* 75 |                    INDEX RANGE SCAN                | I_OBJ5             |     1 |    38 |       |     2   (0)| 00:00:01 |
    |* 76 |                   INDEX RANGE SCAN                 | I_USER2            |     1 |    22 |       |     1   (0)| 00:00:01 |
    |* 77 |                  INDEX RANGE SCAN                  | I_OBJAUTH1         |     3 |    39 |       |     1   (0)| 00:00:01 |
    |* 78 |                FIXED TABLE FULL                    | X$KZSRO            |     1 |     3 |       |     0   (0)|          |
    |  79 |                NESTED LOOPS                        |                    |     1 |    32 |       |     3   (0)| 00:00:01 |
    |* 80 |                 INDEX SKIP SCAN                    | I_USER2            |     1 |    20 |       |     1   (0)| 00:00:01 |
    |* 81 |                 INDEX RANGE SCAN                   | I_OBJ4             |     1 |    12 |       |     2   (0)| 00:00:01 |
    |* 82 |               FIXED TABLE FULL                     | X$KZSPR            |    17 |   119 |       |     0   (0)|          |
    |* 83 |           TABLE ACCESS BY INDEX ROWID              | SYN$               |     1 |    36 |       |     1   (0)| 00:00:01 |
    |* 84 |            INDEX UNIQUE SCAN                       | I_SYN1             |     1 |       |       |     0   (0)|          |
    PLAN_TABLE_OUTPUT
    |* 85 |          TABLE ACCESS BY INDEX ROWID               | OBJ$               |     1 |    38 |       |     3   (0)| 00:00:01 |
    |* 86 |           INDEX RANGE SCAN                         | I_OBJ1             |     1 |       |       |     2   (0)| 00:00:01 |
    |* 87 |         INDEX RANGE SCAN                           | I_USER2            |     1 |    22 |       |     1   (0)| 00:00:01 |
    |  88 |        NESTED LOOPS                                |                    |     1 |    32 |       |     3   (0)| 00:00:01 |
    |* 89 |         INDEX SKIP SCAN                            | I_USER2            |     1 |    20 |       |     1   (0)| 00:00:01 |
    |* 90 |         INDEX RANGE SCAN                           | I_OBJ4             |     1 |    12 |       |     2   (0)| 00:00:01 |
    Predicate Information (identified by operation id):
    PLAN_TABLE_OUTPUT
       1 - filter((:B2='TYPE' OR :B2='TABLE' OR :B2='VIEW' OR :B2='FUNCTION' OR :B2='PROCEDURE' OR :B2='PACKAGE' OR
                  :B2='SEQUENCE' OR :B2='QUEUE' OR :B2='SYNONYM'))
       6 - filter("U"."TYPE#"=1)
       7 - filter("CDU"."USER_TYPE"='S')
       8 - access("CDU"."USER_NAME"="U"."NAME")
      10 - access("U"."DATATS#"="DTS"."TS#")
      12 - access("U"."TEMPTS#"="TTS"."TS#")
      16 - filter(((INTERNAL_FUNCTION("O"."SPARE3") OR ("S"."NODE" IS NULL AND  IS NOT NULL) OR  IS NOT NULL) AND
                  (("O"."TYPE#"<>4 AND "O"."TYPE#"<>5 AND "O"."TYPE#"<>7 AND "O"."TYPE#"<>8 AND "O"."TYPE#"<>9 AND "O"."TYPE#"<>10 AND
                  "O"."TYPE#"<>11 AND "O"."TYPE#"<>12 AND "O"."TYPE#"<>13 AND "O"."TYPE#"<>14 AND "O"."TYPE#"<>22 AND "O"."TYPE#"<>87 AND
                  "O"."TYPE#"<>88) OR BITAND("U"."SPARE1",16)=0 OR (SYS_CONTEXT('userenv','current_edition_name')='ORA$BASE' AND
    PLAN_TABLE_OUTPUT
                  "U"."TYPE#"<>2) OR ("U"."TYPE#"=2 AND "U"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id'))) OR  IS NOT
                  NULL)))
      21 - access("U"."NAME"="CDU"."USER_NAME")
      23 - access("S"."NAME"=:B1)
           filter("S"."NAME"=:B1)
      24 - filter("O"."SPARE3"="U"."USER#")
      25 - access("O"."OBJ#"="S"."OBJ#" AND "O"."TYPE#"=5)
           filter("O"."TYPE#"=5)
      26 - access("O"."OWNER#"="U"."USER#")
      27 - filter((((-"KZSPRPRV")=(-45) OR (-"KZSPRPRV")=(-47) OR (-"KZSPRPRV")=(-48) OR (-"KZSPRPRV")=(-49) OR
                  (-"KZSPRPRV")=(-50)) AND "INST_ID"=USERENV('INSTANCE')))
    PLAN_TABLE_OUTPUT
      28 - filter((("BA"."GRANTOR#"=USERENV('SCHEMAID') OR  IS NOT NULL) AND (("O"."TYPE#"<>4 AND "O"."TYPE#"<>5 AND
                  "O"."TYPE#"<>7 AND "O"."TYPE#"<>8 AND "O"."TYPE#"<>9 AND "O"."TYPE#"<>10 AND "O"."TYPE#"<>11 AND "O"."TYPE#"<>12 AND
                  "O"."TYPE#"<>13 AND "O"."TYPE#"<>14 AND "O"."TYPE#"<>22 AND "O"."TYPE#"<>87 AND "O"."TYPE#"<>88) OR
                  BITAND("U"."SPARE1",16)=0 OR (INTERNAL_FUNCTION("O"."TYPE#") AND
                  ((SYS_CONTEXT('userenv','current_edition_name')='ORA$BASE' AND "U"."TYPE#"<>2) OR ("U"."TYPE#"=2 AND
                  "U"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id'))) OR  IS NOT NULL)))))
      29 - filter(:B1 IS NULL)
      34 - access("BU"."NAME"=:B1)
      35 - access("BU"."USER#"="O"."SPARE3" AND "O"."NAME"=:B1)
      36 - access("O"."OWNER#"="U"."USER#")
      37 - access("BA"."OBJ#"="O"."OBJ#")
    PLAN_TABLE_OUTPUT
      38 - filter("KZSROROL"=:B1)
      40 - access("U2"."TYPE#"=2 AND "U2"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id')))
           filter(("U2"."TYPE#"=2 AND "U2"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id'))))
      41 - access("O2"."DATAOBJ#"=:B1 AND "O2"."TYPE#"=88 AND "O2"."OWNER#"="U2"."USER#")
      43 - access("U2"."TYPE#"=2 AND "U2"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id')))
           filter(("U2"."TYPE#"=2 AND "U2"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id'))))
      44 - access("O2"."DATAOBJ#"=:B1 AND "O2"."TYPE#"=88 AND "O2"."OWNER#"="U2"."USER#")
      45 - filter((("O"."TYPE#"<>4 AND "O"."TYPE#"<>5 AND "O"."TYPE#"<>7 AND "O"."TYPE#"<>8 AND "O"."TYPE#"<>9 AND
                  "O"."TYPE#"<>10 AND "O"."TYPE#"<>11 AND "O"."TYPE#"<>12 AND "O"."TYPE#"<>13 AND "O"."TYPE#"<>14 AND "O"."TYPE#"<>22 AND
                  "O"."TYPE#"<>87 AND "O"."TYPE#"<>88) OR BITAND("U"."SPARE1",16)=0 OR
                  (SYS_CONTEXT('userenv','current_edition_name')='ORA$BASE' AND "U"."TYPE#"<>2) OR ("U"."TYPE#"=2 AND
    PLAN_TABLE_OUTPUT
                  "U"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id'))) OR  IS NOT NULL))
      51 - access("U"."NAME"="CDU"."USER_NAME")
      53 - access("S"."BASE_SYN_ID"=PRIOR NULL)
           filter( IS NOT NULL)
      54 - filter((("O"."TYPE#"<>4 AND "O"."TYPE#"<>5 AND "O"."TYPE#"<>7 AND "O"."TYPE#"<>8 AND "O"."TYPE#"<>9 AND
                  "O"."TYPE#"<>10 AND "O"."TYPE#"<>11 AND "O"."TYPE#"<>12 AND "O"."TYPE#"<>13 AND "O"."TYPE#"<>14 AND "O"."TYPE#"<>22 AND
                  "O"."TYPE#"<>87 AND "O"."TYPE#"<>88) OR BITAND("U"."SPARE1",16)=0 OR
                  (SYS_CONTEXT('userenv','current_edition_name')='ORA$BASE' AND "U"."TYPE#"<>2) OR ("U"."TYPE#"=2 AND
                  "U"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id'))) OR  IS NOT NULL))
      55 - access("O"."OWNER#"="U"."USER#")
      57 - access("S"."OWNER"="BU"."NAME" AND "BU"."USER#"="O"."SPARE3")
    PLAN_TABLE_OUTPUT
      59 - access("S"."NAME"="O"."NAME")
      61 - filter("O"."TYPE#"=5)
      63 - access("U2"."TYPE#"=2 AND "U2"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id')))
           filter(("U2"."TYPE#"=2 AND "U2"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id'))))
      64 - access("O2"."DATAOBJ#"=:B1 AND "O2"."TYPE#"=88 AND "O2"."OWNER#"="U2"."USER#")
      65 - filter(( IS NOT NULL OR ("S"."NODE" IS NULL AND  IS NOT NULL)))
      67 - access("S"."OBJ#"=:B1)
      68 - filter((("BA"."GRANTOR#"=USERENV('SCHEMAID') OR  IS NOT NULL) AND (("O"."TYPE#"<>4 AND "O"."TYPE#"<>5 AND
                  "O"."TYPE#"<>7 AND "O"."TYPE#"<>8 AND "O"."TYPE#"<>9 AND "O"."TYPE#"<>10 AND "O"."TYPE#"<>11 AND "O"."TYPE#"<>12 AND
                  "O"."TYPE#"<>13 AND "O"."TYPE#"<>14 AND "O"."TYPE#"<>22 AND "O"."TYPE#"<>87 AND "O"."TYPE#"<>88) OR
                  BITAND("U"."SPARE1",16)=0 OR (INTERNAL_FUNCTION("O"."TYPE#") AND
    PLAN_TABLE_OUTPUT
                  ((SYS_CONTEXT('userenv','current_edition_name')='ORA$BASE' AND "U"."TYPE#"<>2) OR ("U"."TYPE#"=2 AND
                  "U"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id'))) OR  IS NOT NULL)))))
      69 - filter(:B1 IS NULL)
      74 - access("BU"."NAME"=:B1)
      75 - access("BU"."USER#"="O"."SPARE3" AND "O"."NAME"=:B1)
      76 - access("O"."OWNER#"="U"."USER#")
      77 - access("BA"."OBJ#"="O"."OBJ#")
      78 - filter("KZSROROL"=:B1)
      80 - access("U2"."TYPE#"=2 AND "U2"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id')))
           filter(("U2"."TYPE#"=2 AND "U2"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id'))))
      81 - access("O2"."DATAOBJ#"=:B1 AND "O2"."TY

  • Dynamic DDL execution using DBMS_SQL

    Hello,
    I've done a set of PL/SQL blocks that helps me to automate some tasks of my schema for better productivity. It concerns the most of the time :
    - activate/deactivate foreign keys and constraints
    - delete and recreate a set of objects
    - etc
    My routines execute a query on the dictionary to construct other queries to manipulate my objects. It works fine for a couple of comands:
    -- DISABLE CONSTRAINTS
    DECLARE
    CURSOR curs
    IS
    SELECT 'ALTER TABLE "'
    || table_name
    || '" DISABLE CONSTRAINT "'
    || constraint_name
    || '"' text
    FROM SYS.user_constraints
    WHERE constraint_type = 'R' AND owner = r_owner;
    c_row curs%ROWTYPE;
    cursor_name INTEGER;
    BEGIN
    FOR c_row IN curs
    LOOP
    cursor_name := DBMS_SQL.open_cursor;
    DBMS_SQL.parse (cursor_name, c_row.text, DBMS_SQL.native);
    DBMS_SQL.close_cursor (cursor_name);
    END LOOP;
    END;
    -- TRUNCATE ALL TABLES
    DECLARE
    CURSOR curs
    IS
    SELECT 'TRUNCATE TABLE "' || table_name || '"' text
    FROM SYS.user_tables
    WHERE partitioned = 'NO';
    c_row curs%ROWTYPE;
    cursor_name INTEGER;
    BEGIN
    FOR c_row IN curs
    LOOP
    cursor_name := DBMS_SQL.open_cursor;
    DBMS_SQL.parse (cursor_name, c_row.text, DBMS_SQL.native);
    DBMS_SQL.close_cursor (cursor_name);
    END LOOP;
    END;
    It works fine, but it's not the case for this one:
    -- DROP ALL SCHEMA OBJECTS
    DECLARE
    CURSOR curs
    IS
    SELECT 'DROP '
    || object_type
    || ' "'
    || object_name
    || '"'
    || DECODE (object_type, 'TABLE', ' CASCADE CONSTRAINTS PURGE', '')
    || ';' text
    FROM user_objects
    WHERE object_type NOT IN ('INDEX','TRIGGER');
    c_row curs%ROWTYPE;
    cursor_name INTEGER;
    BEGIN
    FOR c_row IN curs
    LOOP
    cursor_name := DBMS_SQL.open_cursor;
    DBMS_OUTPUT.put_line (c_row.text);
    --DBMS_SQL.parse (cursor_name, c_row.text, DBMS_SQL.native);
    DBMS_SQL.close_cursor (cursor_name);
    END LOOP;
    END;
    The DBMS Output gives me successfuly de set of commands like:
    DROP TABLE "T1" CASCADE CONSTRAINTS PURGE;
    DROP SEQUENCE "SEQ1";
    and so on...
    When I uncomment the DBMS_SQL.parse for this one... I receive the following error:
    ORA-00911: invalid character
    ORA-06512: at "SYS.DBMS_SYS_SQL", line 906
    ORA-06512: at "SYS.DBMS_SQL", line 39
    ORA-06512: at line 21
    I can't figure it out.... any ideas ?
    Thanks in advance
    Bruno Lavoie

    What I prefere for such a task is to use SQL*PLUS scripts.
    Select and Spool all the commands (DROP, ALTER, whatever) to some sql file. THen run this file.
    The advantage is that you can much better see which commands are actually executed.

  • Create a function

    Hi all,
    I would like to understand what is my errors in this procedure :
    * I get : Warning: Procedure created with compilation errors.
    Anyone could help me please?
    * This procedure drop all the objects in the current schema.
    CREATE OR REPLACE PROCEDURE DROPOBJECTS
    AS
         cursor c_get_objects is
              select object_type,'"'||object_name||'"'||decode(object_type,'TABLE' ,' cascade constraints',null) obj_name from user_objects
              where object_type in ('TABLE','VIEW','PACKAGE','SEQUENCE','PROCEDURE','FUNCTION',
              'SYNONYM', 'MATERIALIZED VIEW') AND (object_name NOT LIKE '%BIN$%')
              order by object_type;
         cursor c_get_objects_type is select object_type, '"'||object_name||'"' obj_name from user_objects where object_type in ('TYPE');
    begin
         for object_rec in c_get_objects loop
              execute immediate ('drop '||object_rec.object_type||' ' ||object_rec.obj_name);
         end loop;
         for object_rec in c_get_objects_type loop
              execute immediate ('drop '||object_rec.object_type||' ' ||object_rec.obj_name);
         end loop;
    END
    thanks to all.

    The statis is INVALID
    When I compile the procedure, I get :
    SQL> ALTER PROCEDURE jim.dropobjects COMPILE;
    Warning: Procedure altered with compilation errors.
    I'm able to run the script by command line :
    ------------ original script -------------------
    declare
    cursor c_get_objects is
    select object_type,'"'||object_name||'"'||decode(object_type,'TABLE' ,' cascade constraints',null) obj_name from user_objects
    where object_type in ('TABLE','VIEW','PACKAGE','SEQUENCE','PROCEDURE','FUNCTION',
    'SYNONYM', 'MATERIALIZED VIEW') AND (object_name NOT LIKE '%BIN$%')
    order by object_type;
    cursor c_get_objects_type is select object_type, '"'||object_name||'"' obj_name from user_objects where object_type in ('TYPE');
    begin
    for object_rec in c_get_objects loop
    execute immediate ('drop '||object_rec.object_type||' ' ||object_rec.obj_name);
    end loop;
    for object_rec in c_get_objects_type loop
    begin execute immediate ('drop '||object_rec.object_type||' ' ||object_rec.obj_name);
    end;
    end loop;
    end;
    But, I have to create a function available to some developper users. so, I try to convert the script into a procedure.
    SqlPlus does not indicates the specific error.

  • Reports: Additional Image in  a Colunm

    Hi all,
    A report retrieves it's Query from a PL/SQL Function.
    The report merges some Ruled address data together with some individual address data, criteria are retrieved from the same page call.
    The first report column contains APEX_ITEM.CHECKBOX on the queries column "ID" and works as a selector.
    Other columns shows detailed information. That all works fine.
    Now I want to implement an "edit" link into the same column.
    The link should only be visible, if the value of "ID" in the same row raises some limits.
    By klicking it, the user should be able to edit some individual values.
    Adding a separate column to the report didn't meet the requirements.
    It's not adding the "<IMG SRC>" tag, more the correct implementation of the logic
    that one row shows the link and another row doesn't.
    Where and how do I have to implement the logic ?
    regards
    Franz Langner

    Franz:
    Try concatenating the image/link code with the apex_item.checkbox column like in the query below
    select
    apex_item.checkbox(1,'Y') ||
    decode(object_type,'TABLE',
       '[a href="destination"][IMG SRC="../i/edit.gif"][a]','')  id
    ,object_type
    from obj;Varad
    Replace the [ & ] approriately
    Message was edited by:
    varad acharya

  • DB-link is not connected from Forms 10g

    Hi,
    I have created the db-link(visdev) from mytest schema to APPS schema -- created successfully
    ->Login to mytest schema and ran the query: select * from all_objects@dblink -- Return values.
    -> I have used the same dblink with below code from Forms 10g (Datablock - Pre-insert trigger)
    cursor_handle := dbms_sql.open_cursor;
    dbms_sql.parse(cursor_handle, 'select decode(object_type,''TABLE'',''T'',''VIEW'',''V'',null) col1 from all_objects'||'@'||db-link, 1);
    dbms_sql.define_column(cursor_handle,1,col1,30);
    execute_feedback := dbms_sql.execute (cursor_handle);
    execute_feedback := dbms_sql.fetch_rows(cursor_handle);
    dbms_sql.column_value(cursor_handle,1,col1);
    Its throws error in Pre-insert trigger : select decode(object_type,'TABLE','T','VIEW','V',null) col1 from all_objects@db-link ---- Not return values -- error out
    I found this error using log message.
    Can you please help us... its very critical for us.
    Edited by: user775668 on Jun 17, 2011 5:46 AM
    Edited by: user775668 on Jun 17, 2011 5:46 AM

    In terms of trying to debug this why don't you login to your schema and create a view:
    create view testview as select * from all_objects@dblink
    and deal with that instead?
    (You would need to grant permissions to that view.)
    I mean as a way to keep the complex dbms_sql out of the loop and look
    more to permissions and schema issues. In the long term the view hard codes the structure and is
    not a good solution if the structure changes. I just mean as a test.
    BTW you know there is an all_objects already? Didn't know if you meant that literally or not.
    You could not use that name.

  • Use expdp/impdp to reorganize a tablespace to remove additional datafile ?

    Oracle 10g (10.2.0.1)
    We had a tablespace with a single datafile WORK1, WORK1 filled up, colleague added two datafiles WORK2 and WORK3 (instead of resizing original larger).
    I resized WORK1, increasing by 500Mb.
    I was able to drop WORK3, but not WORK2 (ORA-03262: the file is non-empty)
    My proposed solution is to expdp the tablespace, drop the tablespace and datafiles, recreate the tablespace with a correctly sized datafile and finally impdp the tablespace.
    Is this solution valid ?
    Any hints at syntax would be useful

    1. Map your datafile.
    2. If no segments in datafile, drop it and go to 5.
    2. Shrink the datafile up to where the data ends.
    3. Rebuild/move the last object in the data file,
    4. Go to 1
    5. Fin
    To map data file...
    accept file_num char prompt 'File ID: ';
    SET PAGESIZE   70
    SET LINESIZE   132
    SET NEWPAGE    0
    SET VERIFY     OFF
    SET ECHO       OFF
    SET HEADING    ON
    SET FEEDBACK   OFF
    SET TERMOUT    ON
    COLUMN file_name   FORMAT a50          HEADING 'File Name'
    COLUMN owner       FORMAT a10   TRUNC  HEADING 'Owner'
    COLUMN object      FORMAT a30   TRUNC  HEADING 'Object'
    COLUMN obj_type    FORMAT a2           HEADING ' '
    COLUMN block_id    FORMAT 9999999      HEADING 'Block|ID'
    COLUMN blocks      FORMAT 999,999      HEADING 'Blocks'
    COLUMN mbytes      FORMAT 9,999.99     HEADING 'M-Bytes'
    SELECT  'free space'      owner,
            ' '               object,
            ' '               obj_type,
            f.file_name,
            s.block_id,
            s.blocks,
            s.bytes/1048576   mbytes
      FROM  dba_free_space s,
            dba_data_files f
    WHERE  s.file_id = TO_NUMBER(&file_num)
       AND  s.file_id = f.file_id
    UNION
    SELECT  owner,
            segment_name,
            DECODE(segment_type, 'TABLE',          'T',
                                 'INDEX',          'I',
                                 'ROLLBACK',       'RB',
                                 'CACHE',          'CH',
                                 'CLUSTER',        'CL',
                                 'LOBINDEX',       'LI',
                                 'LOBSEGMENT',     'LS',
                                 'TEMPORARY',      'TY',
                                 'NESTED TABLE',   'NT',
                                 'TYPE2 UNDO',     'U2',
                                 'TABLE PARTITION','TP',
                                 'INDEX PARTITION','IP', '?'),
            f.file_name,
            s.file_id,
            s.block_id,
            s.blocks,
            s.bytes/1048576
      FROM  dba_extents s,
            dba_data_files f
    WHERE  s.file_id = TO_NUMBER(&file_num)
       AND  s.file_id = f.file_id
    ORDER
        BY  file_id,
            block_id

  • Fragmentation in tablespace in oracle 9i

    Hi All,
    We have oracle 9.2.0.8 installed in solaris 9, database size is 1.5 TB, we are looking for the tablespaces which are suffering from the fragmentation.
    We have locally manged tablesapaces in the database. so can you please tell me, is there any tablespace fragmentation in the locally managed tablespace in oracle 9i, and if it is there than how to relove the situation.?
    thanks in advance

    If you mean by fragmentation, a number of free space areas in the data files - sometimes called honeycombing, this script will show them to you.
    SELECT  'free space'      owner,
            ' '               object,
            ' '               obj_type,
            f.file_name,
            s.file_id,
            s.block_id,
            s.blocks,
            s.bytes/1048576   mbytes
      FROM  dba_free_space s,
            dba_data_files f
    WHERE  s.file_id = &file_id
       AND  s.file_id = f.file_id
    UNION
    SELECT  owner,
            segment_name,
            DECODE(segment_type, 'TABLE',          'T',
                                 'INDEX',          'I',
                                 'ROLLBACK',       'RB',
                                 'CACHE',          'CH',
                                 'CLUSTER',        'CL',
                                 'LOBINDEX',       'LI',
                                 'LOBSEGMENT',     'LS',
                                 'TEMPORARY',      'TY',
                                 'NESTED TABLE',   'NT',
                                 'TYPE2 UNDO',     'U2',
                                 'TABLE PARTITION','TP',
                                 'INDEX PARTITION','IP', '?'),
            f.file_name,
            s.file_id,
            s.block_id,
            s.blocks,
            s.bytes/1048576
      FROM  dba_extents s,
            dba_data_files f
    WHERE  s.file_id = &file_id
       AND  s.file_id = f.file_id
    ORDER
        BY  file_id,
            block_id
    However, when you look at the report you will see that in a locally managed tablespace, all of the free space 'chunks' are all 8 blocks, or a multiple of 8 blocks. This means that all of these free space chunks are able to be (re)used. And, they will be used. There is no need to do anything unless there is a pressing need to give disk back to the OS.

Maybe you are looking for

  • Free Item ticked in R/3 PO - Extended Classic Scenario

    Hi All, We are working in SRM4.0 , Exteneded Classic Scenario, Its a catalgoue item, In SC# its having a Net Value say $3,500, but when i checked PO in the R/3 , it shows the Net price is 0.0 (zero) and Free Item is ticked. Why the PO shows net value

  • 64bit weblogic server installation on windows

    Hi, We are trying to install 64bit Oracle weblogic Server 10.3.2 on windows 2007 Server. As per the documentation, The installation requires 64bit java installation and then execute the wl_1032_server.jar file. We installed weblogic Server successful

  • A bug in iOS 5.1

    After updating my iPhone 4s to iOS 5.1.  I can no longer turn it off. The slider only go halvway to the right and slip back by it self under my finger. The unlock slider behaves the same way. ITunes says that the phone is updated to the last version.

  • NAC appliance: Bulk selections in one action?

    I'm setting up multiple profiles on the Clean Access Manager but I now need to select many (100+) plugins per user role and also change the 'vulnerable if' settings. Is there a way to make a bulk of changes at once (ie: not clicking all plugins but a

  • HP2600n suddenly stopped printing in Windows 7 system 64-bit--wh​y? No error mes, no system changes

    After two months, HP2600n suddenly stopped printing in Windows 7 system 64-bit--why?  No error mes, no system changes. I tried reinstalling the drivers, changing USB ports and cables, printing from Notepad, and disconnecting the  printer. My computer