With the help of the ORA-00904 granted by ROLE

Hi all

I have an error using the grant through ROLE (Oracle 11.2.0.1 on redhat Linux)

Here is the explanation of my problem:

I create a package to wear patterns

create or replace 
PACKAGE                     usera.pkg_utils AS 
 function f_my_function return RAW;
END pkg_utils;

I create the package body:

create or replace 
PACKAGE BODY usera.pkg_utils  AS 
 function f_my_function return RAW  is
  v_uuid RAW(16);
begin
  v_uuid := sys.dbms_crypto.randombytes(16);
  return (utl_raw.overlay(utl_raw.bit_or(utl_raw.bit_and(utl_raw.substr(v_uuid, 7, 1), '0F'), '40'), v_uuid, 7));
end f_random_uuid;
END pkg_utils;

I create a 'R_ROLE1' role to which I admit "EXECUTE ON USERA. PKG_UTILS TO R_ROLE1.

I give you that R_ROLE1 to the PUBLIC so that each user can access the package USERA. PKG_UTIS

If I call another user f_my_function, it works well.

If I call another user from a procedure f_my_function I get "ORA-00904".

ex: to UserB

create or replace 
PROCEDURE P_PROC
AS
num int;
uuid_ RAW(16);
BEGIN
    select usera.pkg_utils.f_my_function() into uuid_ from dual;
END P_PROC;
/

If I give you that directly "GRANT EXECUTE ON USERA. PKG_UTILS TO PUBLIC' so it works well.

Thus, the error comes from the fact that I use a role, but I can't fix it. I don't understand why USERB does not use its grant to the role of r_role1 granted to PUBLIC.

Is there something as USERB is unusable cascade role during the call to a procedure? is there something to "activate"? ".

Thank you all

See the doc database security for your answer and the explanation of what others have said.

http://docs.Oracle.com/CD/B28359_01/network.111/B28531/authorization.htm#i1007304

Operation of the roles in PL/SQL blocks

The use of roles in a PL/SQL block depends on if it is an anonymous block, or a block named (stored procedure, function, or trigger), and if it runs with the rights of the author or the rights of the applicant.

Roles used in the appointed with rights to define blocks

All roles are disabled in any PL/SQL block named (stored procedure, function, or trigger) that runs with the rights of the author. Roles are not used to privilege control, and you cannot define roles within the procedure of a DEFINER rights.

The SESSION_ROLES view shows all roles that are currently enabled. If a named PL/SQL block that runs with Definer Rights queries SESSION_ROLES , then the query will return no rows.

Tags: Database

Similar Questions

  • Please, I have the following question on the foreign key and the ora-00904

    Thanks in advance!

    I created the table:

    Create the Department table
    (
    DNAME varchar (15) NOT NULL,
    deptID number (5) NOT NULL,
    Primary key (dname, deptid)
    )

    then...

    Create table Manager
    (
    MgrID number (10) not null,
    Not null, name varchar (10)
    Start_date date not null,
    Primary key (mgrid),

    CONSTRAINT fk_department
    FOREIGN KEY (dname, deptip)
    Department of REFERENCES (dname, deptid)
    )

    Trying to create the table with the constraint, it yeilds one:

    ORA-00904: "DNAME": invalid identifier
    +.. .with an asterisk under "dname" in line: FOREIGN KEY (dname, deptip) +.

    I tried joining my name of the column with quotation marks ("" "); capitalized for consistency; and we tried creating and editing then - all to nothing will do. I also tried to use the user interface with Oracle Express Edition and the moment where I click on create, the same error appears. Could someone help please straighten out me up - was this threat for four days.

    Thanks again!

    Hello

    Welcome to the forum!

    Columns that will reference the other table must be declared just like all the other columns; including the names in a FOREIGN KEY constraint is not auotmatically define them.
    It works:

    CREATE TABLE Manager
    (       mgrid          NUMBER (10)     NOT NULL,
         Name          VARCHAR (10)     NOT NULL,
         Start_date      DATE          NOT NULL,
         dname          VARCHAR2 (15),               -- New
         deptid          NUMBER (5),               -- New
    PRIMARY KEY (mgrid),
         --
    CONSTRAINT fk_department
    FOREIGN KEY           (dname, deptid)
    REFERENCES department (dname, deptid)
    );
    

    (assuming that the departments table, you posted, there).

    Is there a reason why you use VARCHAR instead of VARCHAR2?

    In the departments table, do you really need both dname and deptid in the primary key? For example, if you have a line with name = "ACCOUNTING" and deptid = 10; is it possible that you could have another line with deptid = 10 and some different dname, say 'REASEARCH '? It is more common to only have a deptid as primary key and have columns in the foreign key constraints that reference.

  • DB decreased with the ora-7445

    Hello
    Oracle 9.2.0.8
    OS: Solaris

    one of my prod (OLAP) DB was down with ora - 7445.can someone please help.

    Thank you
    Sam.

    sam995972 wrote:
    Thank you all for the quick response.

    bug any idea why this error occurring?

    I hope that maybe it's BUG 8709146.

    error ORA-7445 arises due to the inconsistency of the transaction locking internally.

    Please contact the support of oracle through SR.

  • PLSQL procedure with the ORA-01858: a non-digit character was found where

    Hi friends,
    I'm pretty much back to the plsql programming. I am creating the plsql procedure that basically accepts the values of variables and controls difference of two columns if she's even if different it inserts values into the temporary table GTT_S_DOC_QUOTE, and then inserts data into another table in s_doc_quote please help me or correct my procedure.
    Since I'm getting below error ORA-01858: a non-digit character was found here where waiting a digital .my procedure is as below.
    CREATE OR REPLACE PROCEDURE QUOTE_STS)

    ROW_ID_IN GGATE_CT. GTT_S_DOC_QUOTE. ROW_ID % TYPE,
    STAT_CD_IN GGATE_CT. GTT_S_DOC_QUOTE. STAT_CD % TYPE,
    PREV_STS_CD_IN GGATE_CT. GTT_S_DOC_QUOTE. PREV_STS_CD % TYPE,
    BU_ID_IN GGATE_CT. GTT_S_DOC_QUOTE. BU_ID % TYPE,
    CREATED_IN GGATE_CT. GTT_S_DOC_QUOTE. CREATED % TYPE,
    X_CRRNT_TOT_AGRD_RMS_IN GGATE_CT. GTT_S_DOC_QUOTE. X_CRRNT_TOT_AGRD_RMS % TYPE,
    X_CRRNT_TOT_BLCKD_RMS_IN GGATE_CT. GTT_S_DOC_QUOTE. X_CRRNT_TOT_BLCKD_RMS % TYPE,
    X_CRRNT_TOT_PCKDUP_RMS_IN GGATE_CT. GTT_S_DOC_QUOTE. X_CRRNT_TOT_PCKDUP_RMS % TYPE,
    X_CRRNT_TOT_PCKDUP_AVGRT_IN GGATE_CT. GTT_S_DOC_QUOTE. X_CRRNT_TOT_PCKDUP_AVGRT % TYPE,
    X_CRRNT_TOT_BLCKD_AVGRT_IN GGATE_CT. GTT_S_DOC_QUOTE. X_CRRNT_TOT_BLCKD_AVGRT % TYPE,
    X_CRRNT_CNTRCT_SR_REVN_IN GGATE_CT. GTT_S_DOC_QUOTE. X_CRRNT_CNTRCT_SR_REVN % TYPE,
    X_CRRNT_CNTRCT_FD_REVN_IN GGATE_CT. GTT_S_DOC_QUOTE. X_CRRNT_CNTRCT_FD_REVN % TYPE,
    X_CRRNT_CNTRCT_BEV_REVN_IN GGATE_CT. GTT_S_DOC_QUOTE. X_CRRNT_CNTRCT_BEV_REVN % TYPE,
    X_CRRNT_CNTRCT_RM_REVN_IN GGATE_CT. GTT_S_DOC_QUOTE. X_CRRNT_CNTRCT_RM_REVN % TYPE,
    X_CRRNT_USD_EXCHNG_RT_IN GGATE_CT. GTT_S_DOC_QUOTE. X_CRRNT_USD_EXCHNG_RT % TYPE,
    X_CRRNT_CNTRCT_OTHR_REVN_IN GGATE_CT. GTT_S_DOC_QUOTE. X_CRRNT_CNTRCT_OTHR_REVN % TYPE,
    X_CRRNT_CNTRCT_RSRC_REVN_IN GGATE_CT. GTT_S_DOC_QUOTE. X_CRRNT_CNTRCT_RSRC_REVN % TYPE,
    LAST_UPD_IN GGATE_CT. GTT_S_DOC_QUOTE. LAST_UPD % TYPE)

    BEGIN

    IF (PREV_STS_CD == STAT_CD) then
    END if;
    INSERT INTO GTT_S_DOC_QUOTE)
    ROW_ID,
    STAT_CD,
    PREV_STS_CD,
    BU_ID,
    CREATED,
    X_CRRNT_TOT_AGRD_RMS,
    X_CRRNT_TOT_BLCKD_RMS,
    X_CRRNT_TOT_PCKDUP_RMS,
    X_CRRNT_TOT_PCKDUP_AVGRT,
    X_CRRNT_TOT_BLCKD_AVGRT,
    X_CRRNT_CNTRCT_SR_REVN,
    X_CRRNT_CNTRCT_FD_REVN,
    X_CRRNT_CNTRCT_BEV_REVN,
    X_CRRNT_CNTRCT_RM_REVN,
    X_CRRNT_USD_EXCHNG_RT,
    X_CRRNT_CNTRCT_OTHR_REVN,
    X_CRRNT_CNTRCT_RSRC_REVN,
    LAST_UPD
    )
    VALUES ('ROW_ID_IN',
    "STAT_CD_IN,"
    "PREV_STS_CD_IN,"
    "BU_ID_IN,"
    "CREATED_IN,"
    "X_CRRNT_TOT_AGRD_RMS_IN,"
    "X_CRRNT_TOT_BLCKD_RMS_IN,"
    "X_CRRNT_TOT_PCKDUP_RMS_IN,"
    "X_CRRNT_TOT_PCKDUP_AVGRT_IN,"
    "X_CRRNT_TOT_BLCKD_AVGRT_IN,"
    "X_CRRNT_CNTRCT_SR_REVN_IN,"
    "X_CRRNT_CNTRCT_FD_REVN_IN,"
    "X_CRRNT_CNTRCT_BEV_REVN_IN,"
    "X_CRRNT_CNTRCT_RM_REVN_IN,"
    "X_CRRNT_USD_EXCHNG_RT_IN,"
    "X_CRRNT_CNTRCT_OTHR_REVN_IN,"
    "X_CRRNT_CNTRCT_RSRC_REVN_IN,"
    'LAST_UPD '.
    );

    INSERT INTO S_DOC_QUOTE_CT
    (ROW_ID_OUT, STAT_CD_OUT, PREV_STS_CD_OUT, BU_ID_OUT, CREATED_OUT, X_CRRNT_TOT_AGRD_RMS_OUT, X_CRRNT_TOT_BLCKD_RMS_OUT, X_CRRNT_TOT_PCKDUP_RMS_OUT, X_CRRNT_TOT_PCKDUP_AVGRT_OUT,
    X_CRRNT_TOT_BLCKD_AVGRT_OUT, X_CRRNT_CNTRCT_SR_REVN_OUT, X_CRRNT_CNTRCT_FD_REVN_OUT, X_CRRNT_CNTRCT_BEV_REVN_OUT, X_CRRNT_CNTRCT_RM_REVN_OUT, X_CRRNT_USD_EXCHNG_RT_OUT, X_CRRNT_CNTRCT_OTHR_REVN_OUT,
    SELECT X_CRRNT_CNTRCT_RSRC_REVN_OUT ROW_ID), STAT_CD, PREV_STS_CD, BU_ID, CREATED, X_CRRNT_TOT_AGRD_RMS, X_CRRNT_TOT_BLCKD_RMS, X_CRRNT_TOT_PCKDUP_RMS, X_CRRNT_TOT_PCKDUP_AVGRT,.
    X_CRRNT_TOT_BLCKD_AVGRT, X_CRRNT_CNTRCT_SR_REVN, X_CRRNT_CNTRCT_FD_REVN, X_CRRNT_CNTRCT_BEV_REVN, X_CRRNT_CNTRCT_RM_REVN, X_CRRNT_USD_EXCHNG_RT, X_CRRNT_CNTRCT_OTHR_REVN,
    GGATE_CT X_CRRNT_CNTRCT_RSRC_REVN. GTT_S_DOC_QUOTE;

    COMMIT;
    end if;
    end QUOTE_STS;

    I was wondering why I get this error even if I stated the PREV_STS_CD

    What line do you think that you said PREV_STS_ID on? As far as I can see that the IF statement is the first mention of it in your code. My guess is that you mean PREV_STATS_ID_IN (goes the same for STAT_CD / STAT_CD_IN).

    If you write

    IF prev_sts_cd_in = stat_cd_in
    THEN
       NULL;
    END IF;
    
    do_something_here;
    

    then "do_something_here" will be processed regardless of the IF condition. I think what you probably wanted was something like

    IF prev_sts_cd_in = stat_cd_in
    THEN
       NULL;
    ELSE
       do_something_here;
    END IF;
    

    Is it possible for the prev_sts_cd and the stat_cd null? The test above would not handle this.

    Also, as others have mentioned, the first INSERT statement attempts to insert the strings like "ROW_ID_IN" you probably want to use the value of the ROW_ID_IN parameter, which is the reason why you get the error ORA-01858. I'm guessing here of course, but I took out the quotes.

    That would make your code something like this:

    CREATE OR REPLACE PROCEDURE quote_sts
        ( row_id_in                    ggate_ct.gtt_s_doc_quote.row_id%TYPE
        , stat_cd_in                   ggate_ct.gtt_s_doc_quote.stat_cd%TYPE
        , prev_sts_cd_in               ggate_ct.gtt_s_doc_quote.prev_sts_cd%TYPE
        , bu_id_in                     ggate_ct.gtt_s_doc_quote.bu_id%TYPE
        , created_in                   ggate_ct.gtt_s_doc_quote.created%TYPE
        , x_crrnt_tot_agrd_rms_in      ggate_ct.gtt_s_doc_quote.x_crrnt_tot_agrd_rms%TYPE
        , x_crrnt_tot_blckd_rms_in     ggate_ct.gtt_s_doc_quote.x_crrnt_tot_blckd_rms%TYPE
        , x_crrnt_tot_pckdup_rms_in    ggate_ct.gtt_s_doc_quote.x_crrnt_tot_pckdup_rms%TYPE
        , x_crrnt_tot_pckdup_avgrt_in  ggate_ct.gtt_s_doc_quote.x_crrnt_tot_pckdup_avgrt%TYPE
        , x_crrnt_tot_blckd_avgrt_in   ggate_ct.gtt_s_doc_quote.x_crrnt_tot_blckd_avgrt%TYPE
        , x_crrnt_cntrct_sr_revn_in    ggate_ct.gtt_s_doc_quote.x_crrnt_cntrct_sr_revn%TYPE
        , x_crrnt_cntrct_fd_revn_in    ggate_ct.gtt_s_doc_quote.x_crrnt_cntrct_fd_revn%TYPE
        , x_crrnt_cntrct_bev_revn_in   ggate_ct.gtt_s_doc_quote.x_crrnt_cntrct_bev_revn%TYPE
        , x_crrnt_cntrct_rm_revn_in    ggate_ct.gtt_s_doc_quote.x_crrnt_cntrct_rm_revn%TYPE
        , x_crrnt_usd_exchng_rt_in     ggate_ct.gtt_s_doc_quote.x_crrnt_usd_exchng_rt%TYPE
        , x_crrnt_cntrct_othr_revn_in  ggate_ct.gtt_s_doc_quote.x_crrnt_cntrct_othr_revn%TYPE
        , x_crrnt_cntrct_rsrc_revn_in  ggate_ct.gtt_s_doc_quote.x_crrnt_cntrct_rsrc_revn%TYPE
        , last_upd_in                  ggate_ct.gtt_s_doc_quote.last_upd%TYPE )
    IS
    BEGIN
        IF prev_sts_cd_in = stat_cd_in
        THEN
            NULL;
        ELSE
            INSERT INTO gtt_s_doc_quote
                 ( row_id
                 , stat_cd
                 , prev_sts_cd
                 , bu_id
                 , created
                 , x_crrnt_tot_agrd_rms
                 , x_crrnt_tot_blckd_rms
                 , x_crrnt_tot_pckdup_rms
                 , x_crrnt_tot_pckdup_avgrt
                 , x_crrnt_tot_blckd_avgrt
                 , x_crrnt_cntrct_sr_revn
                 , x_crrnt_cntrct_fd_revn
                 , x_crrnt_cntrct_bev_revn
                 , x_crrnt_cntrct_rm_revn
                 , x_crrnt_usd_exchng_rt
                 , x_crrnt_cntrct_othr_revn
                 , x_crrnt_cntrct_rsrc_revn
                 , last_upd )
            VALUES
                 ( row_id_in
                 , stat_cd_in
                 , prev_sts_cd_in
                 , bu_id_in
                 , created_in
                 , x_crrnt_tot_agrd_rms_in
                 , x_crrnt_tot_blckd_rms_in
                 , x_crrnt_tot_pckdup_rms_in
                 , x_crrnt_tot_pckdup_avgrt_in
                 , x_crrnt_tot_blckd_avgrt_in
                 , x_crrnt_cntrct_sr_revn_in
                 , x_crrnt_cntrct_fd_revn_in
                 , x_crrnt_cntrct_bev_revn_in
                 , x_crrnt_cntrct_rm_revn_in
                 , x_crrnt_usd_exchng_rt_in
                 , x_crrnt_cntrct_othr_revn_in
                 , x_crrnt_cntrct_rsrc_revn_in
                 , last_upd );
    
            INSERT INTO s_doc_quote_ct
                 ( row_id
                 , stat_cd
                 , prev_sts_cd
                 , bu_id
                 , created
                 , x_crrnt_tot_agrd_rms
                 , x_crrnt_tot_blckd_rms
                 , x_crrnt_tot_pckdup_rms
                 , x_crrnt_tot_pckdup_avgrt
                 , x_crrnt_tot_blckd_avgrt
                 , x_crrnt_cntrct_sr_revn
                 , x_crrnt_cntrct_fd_revn
                 , x_crrnt_cntrct_bev_revn
                 , x_crrnt_cntrct_rm_revn
                 , x_crrnt_usd_exchng_rt
                 , x_crrnt_cntrct_othr_revn
                 , x_crrnt_cntrct_rsrc_revn
                 , last_upd)
            SELECT row_id
                 , stat_cd
                 , prev_sts_cd
                 , bu_id
                 , created
                 , x_crrnt_tot_agrd_rms
                 , x_crrnt_tot_blckd_rms
                 , x_crrnt_tot_pckdup_rms
                 , x_crrnt_tot_pckdup_avgrt
                 , x_crrnt_tot_blckd_avgrt
                 , x_crrnt_cntrct_sr_revn
                 , x_crrnt_cntrct_fd_revn
                 , x_crrnt_cntrct_bev_revn
                 , x_crrnt_cntrct_rm_revn
                 , x_crrnt_usd_exchng_rt
                 , x_crrnt_cntrct_othr_revn
                 , x_crrnt_cntrct_rsrc_revn
                 , last_upd
            FROM   ggate_ct.gtt_s_doc_quote;
    
        END IF;
    END quote_sts;
    
  • What is ORA-29049: unknown record when using UTL_HTTP.begin_request with the HTTPS protocol?

    Hi, here is my question:

    The application context:
    Oracle 10.2.0.4.0
    Operating system: AIX Version 5.3

    A stored procedure executes queries on the web in order to call a Webmodele.
    The used protocol is httpS.
    A certificate has been defined with the Oracle Wallet (orapki) utility

    Problem:
    For several days, making the procedure call webservice no longer works.
    The package has been changed on the database, no patch has been applied on the machine.

    The call to the procedure of utl_http.begin_request with the HTTPS url returns the following error:
    ORA-29049: unknown record
    ORA-06512: at "SYS." UTL_HTTP", line 1027
    ORA-06512: at line 16 level

    A small piece of code/oog is attached, see photo log_sql_ws_call.jpg

    Question

    Can you explain to me the meaning of the error ORA-29049, what may be the cause of this unexpected error and most importantly, how to fix?


    Thank you for your help.

    Finally, it happends only a few days before the described error (ORA-29049), SSL v2 has been disabled on the target domain (SSL v3 has been disbled 1 year ago already).

    The reactivation of SSL v2 solved the ORA-29049.

    Now, I'm dealing with the ORA-12537: TNS:connection closed.

  • ORA-00904 ROW_NUMBER, problem with ORDER BY id

    Hello world

    I use Oracle 9i, I use ROW_NUMBER and I got the ORA-00904 because of the ORDER BY identifier.
    SELECT      * 
    FROM      (SELECT c.id_comp, 
              c.nom, 
              c.id_type_comp, 
              c.libelle, 
              c.standard, 
              c.id_comp_std, 
              c.id_comp_grp, 
              (SELECT      t.nom 
              FROM      type_composant t 
              WHERE      t.id_type_comp=c.id_type_comp ) 
              AS      nom_type_comp , 
              (SELECT t.libelle 
              FROM      type_composant t 
              WHERE      t.id_type_comp=c.id_type_comp ) 
              AS      libelletype, 
              (SELECT cc.nom 
              FROM      composant cc 
              WHERE      cc.id_comp=c.id_comp_std ) 
              AS      nom_comp_std, 
              (SELECT ccc.nom 
              FROM      composant ccc 
              WHERE      ccc.id_comp=c.id_comp_grp ) 
              AS      nom_comp_grp, 
              ROW_NUMBER() OVER (ORDER BY nom_type_comp) R 
         FROM composant c) 
    WHERE      nom LIKE '%' 
    AND      R BETWEEN 0 and 200 
    ORDER BY nom_type_comp;
    And here is the error:
     ROW_NUMBER() OVER (ORDER BY nom_type_comp) R FROM composant c)
                                        *
    ERROR at line 25:
    ORA-00904: "NOM_TYPE_COMP": invalid identifier
    Apparently, it takes the pseudonym I use. I tried with the query instead of the alias, and it worked. Is there a way to do it with the alias because I would use a variable with my ORDER BY.

    Any help would be nice!

    Andalusians

    Published by: Guich may 12, 2011 10:40

    You may not use an alias defined on the same query plan.
    The alias must be from a subquery.
    Such as:

    SELECT      *
    FROM      (select my_table.*, ROW_NUMBER() OVER (ORDER BY nom_type_comp) R
             from  (SELECT c.id_comp,
                     c.nom,
                     c.id_type_comp,
                     c.libelle,
                     c.standard,
                     c.id_comp_std,
                     c.id_comp_grp,
                     (SELECT      t.nom
                     FROM      type_composant t
                     WHERE      t.id_type_comp=c.id_type_comp ) AS      nom_type_comp ,
                     (SELECT t.libelle
                     FROM      type_composant t
                     WHERE      t.id_type_comp=c.id_type_comp ) AS      libelletype,
                     (SELECT cc.nom
                     FROM      composant cc
                     WHERE      cc.id_comp=c.id_comp_std ) AS      nom_comp_std,
                     (SELECT ccc.nom
                     FROM      composant ccc
                     WHERE      ccc.id_comp=c.id_comp_grp ) AS      nom_comp_grp
                FROM composant c) my_table)
    WHERE      nom LIKE '%'
    AND      R BETWEEN 0 and 200
    ORDER BY nom_type_comp;
    

    Nicolas.

  • Problem with the Update Script

    I'm trying to update a column in the database with the following script, but still get errors on the ORA-00904: "CUSTOMER_CONTACT_NRD." "" "" ACTIVE ": identifier not valid, even thought it must be fair.
    In the end, I want to update the table like that, but first test it on a single customer.
    Are the media may not play directly, or am I missing something else?

    Update v_contact v1
    set
    (v1.inactive_contact) = - 1
    where (v1.cust_id =
    customer_contact_nrd.customer_id and v1.contact_no =
    customer_contact_nrd.contact_no and customer_contact_nrd.active = n
    and v1.cust_id = 106586)

    Thank you for your help.

    Published by: mcramer on October 26, 2009 12:38

    Try something like this...

    Update v_contract v1
    Set v1.inactive_contact = - 1
    where v1.cust_id in
    (by selecting v1.cust_id in customer_contact_nrd v3
    where v1.cust_id = v3.customer_id
    and v1.contact_no = v3.contact_no
    and v3.active = ' n and v1.cust_id = 106586)

    or read this...
    http://www.jlcomp.demon.co.UK/FAQ/lost_update.html

  • SDO ORA-00904 identifier valid after patch 20544696 and 20225988 (CPU Apr 15)

    The seller of our web mapping system uses a syntax that contains the identifier SDO_GEOM. SDO_GEOMETRY and similar. An example simplified using the point constructor ODD as in...
    Select sdo_geom.sdo_geometry (2001, 81989, sdo_geom.sdo_point_type (531599, 184530, null), null, null) double;

    This syntax has stopped working in the TEST database, after I applied the patches April 2015 CPU. It generates an ORA-00904: "SDO_GEOM. "" SDO_GEOMETRY ': identifier not valid, which in fact I was expecting. The package SDO_GEOM in schema MDSYS, often referenced without the option scheme by the public synonym, do not contain a type or function SDO_GEOMETRY. I've never used this syntax and wrote instead...

    Select mdsys.sdo_geometry (2001, 81989, mdsys.sdo_point_type (531599, 184530, null), null, null) double;

    .. of course, who continues to work. However, to my surprise, I found that the syntax of the provider, which generates the ORA-00904 in all databases of fix post, works perfectly well in all our pre patch databases.

    Is the same for all other types in the MDSYS (SDO_ELEM_INFO_ARRAY, SDO_ORDINATE_ARRAY...) schema.

    I'm dealing with the strange situation where I not only understand why something has stopped working; first of all I do not understand why the syntax of the seller has already worked.

    We are using Oracle 11.2.0.4 EE with Oracle Spatial on Windows Server 2008 R2 64-bit. Patches that have been requested are

    1) patch 20544696: WINDOWS DB BUNDLE PATCH 11.2. 0.4.15
    2) patch 20225988: WINDOWS ORACLE JAVAVM COMPONENT BUNDLE PATCH 11.2. 0.4.3

    Kind regards

    Torsten

    Hi Torsten,

    Well, here you have a kind of strange thing Oracle Spatial.  If you told me that

    SELECT SDO_GEOM.SDO_GEOMETRY(2001, 81989, SDO_GEOM.SDO_POINT_TYPE(531599, 184530, NULL), NULL, NULL) FROM dual;
    

    is a valid statement, I'd say of course not. But on my production server which is the power supply 11.2.0.4.5, it works!

    However, on a 12 c test server it does not work.

    All I can say is that you are right in everything you say.  Oracle has removed everything that made this weird syntax once the work and it seems that the PSU April stops for good.  Your provider needs to fix things and perhaps address why they used such a weird thing in the first place.

    Like you I don't see what makes this function on 11g.  There is no synonym that I see.  And if wrap you it in an anonymous block fails

    DECLARE
       foo SDO_GEOMETRY;
    BEGIN
       SELECT SDO_GEOM.SDO_GEOMETRY(2001,81989,SDO_GEOM.SDO_POINT_TYPE(531599,184530,NULL),NULL,NULL)
       INTO foo
       FROM dual;
    END;
    /
    

    Strange thing indeed.  I guess there could be a wider discussion here on what patches are in turn brought in 11g and if the side effects are always worth.

    See you soon,.

    Paul

  • java.sql.SQLSyntaxErrorException: ORA-00904: invalid identifier

    Hi all

    IM using JDeveloper 11.1.1.6.0.

    Here, I said method in the main class, which returns an object of type of connection reference.

    When I run the app I type 'ksh' in the fields and click on submit.

    It shows the following error, java.sql.SQLException: ORA-00904: "KSH": invalid identifier

    {code}

    public static list < privileges > getUserPrivileges (DBTransaction dbt, object userId)

    {

    String sql = "SELECT m.menu_code" +.

    "OF sec_menus m p sec_menu_privileges JOIN +.

    "WE (m.menu_code = p.menu_code '+)"

    "(ET m.app_id = p.app_id)" + "

    "JOIN sec_user_app_groups g +.

    "WE (g.GROUP_ID = p.GROUP_ID '+)"

    "AND p.app_id = g.app_id" +.

    "AND user_id =" + userId + "."

    "             )";

    PreparedStatement stat = null;

    ResultSet rs = null;

    List of privileges <>privilegesList = new ArrayList < privileges > ();

    MenuCode string = "";

    Try

    {

    = stat dbt.createPreparedStatement (sql, 1);

    RS = stat.executeQuery ();

    While (RS. Next())

    {

    menuCode = rs.getString (1);

    }

    }

    catch (System.Exception e)

    {

    e.printStackTrace ();

    }

    Finally

    {

    closeStatement (stat);

    closeResultSet (SR);

    }

    Return privilegesList;

    }

    Public Shared Sub closeStatement (stat of statement)

    {

    Try

    {

    STAT. Close();

    }

    catch (SQLException e)

    {

    }

    }

    public static void closeResultSet (ResultSet rs)

    {

    Try

    {

    RS. Close();

    }

    catch (SQLException e)

    {

    }

    }

    ------------

    CREATE TABLE SEC_USERS

    (

    USER_ID VARCHAR2 (10),

    USER_NAME VARCHAR2 (50).

    PASSWORD VARCHAR2 (300)

    )

    Insert into SEC_USERS

    (USER_ID, USER_NAME, USER_FIRST_NAME, USER_LAST_NAME, PASSWORD)

    Values

    ('ksh', 'ksh', 'test');

    COMMIT;

    -----------------------

    Error:

    java.sql.SQLSyntaxErrorException: ORA-00904: "KSH": invalid identifier

    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:462)

    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:405)

    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:931)

    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:481)

    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:205)

    at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:548)

    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:217)

    at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:947)

    at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1283)

    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1441)

    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3769)

    at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3823)

    at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1671)

    dry. ControllerUtil.getUserPrivileges (ControllerUtil.java:90)

    dry. ControllerUtil.login (ControllerUtil.java:59)

    at sec.model.AppModuleImpl.login(AppModuleImpl.java:77)

    at sec.control.bean.LoginPage.loginAction(LoginPage.java:92)

    at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)

    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

    at java.lang.reflect.Method.invoke(Method.java:597)

    at com.sun.el.parser.AstValue.invoke (unknown Source)

    at com.sun.el.MethodExpressionImpl.invoke (unknown Source)

    at org.apache.myfaces.trinidad.component.MethodExpressionMethodBinding.invoke(MethodExpressionMethodBinding.java:46)

    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)

    at org.apache.myfaces.trinidad.component.UIXCommand.broadcast(UIXCommand.java:190)

    to oracle.adf.view.rich.component.fragment.ContextSwitchingComponent$ 1.run(ContextSwitchingComponent.java:92)

    at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent._processPhase(ContextSwitchingComponent.java:361)

    at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent.broadcast(ContextSwitchingComponent.java:96)

    at oracle.adf.view.rich.component.fragment.UIXInclude.broadcast(UIXInclude.java:102)

    to oracle.adf.view.rich.component.fragment.ContextSwitchingComponent$ 1.run(ContextSwitchingComponent.java:92)

    at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent._processPhase(ContextSwitchingComponent.java:361)

    at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent.broadcast(ContextSwitchingComponent.java:96)

    at oracle.adf.view.rich.component.fragment.UIXInclude.broadcast(UIXInclude.java:96)

    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475)

    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756)

    at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._invokeApplication(LifecycleImpl.java:889)

    at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._executePhase(LifecycleImpl.java:379)

    at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:194)

    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)

    to weblogic.servlet.internal.StubSecurityHelper$ ServletServiceAction.run (StubSecurityHelper.java:227)

    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)

    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)

    at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)

    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)

    at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:205)

    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)

    at oracle.adfinternal.view.faces.webapp.rich.RegistrationFilter.doFilter(RegistrationFilter.java:106)

    to org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$ FilterListChain.doFilter (TrinidadFilterImpl.java:446)

    at oracle.adfinternal.view.faces.activedata.AdsFilter.doFilter(AdsFilter.java:60)

    to org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$ FilterListChain.doFilter (TrinidadFilterImpl.java:446)

    at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl(TrinidadFilterImpl.java:271)

    at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:177)

    at org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92)

    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)

    at oracle.adf.library.webapp.LibraryFilter.doFilter(LibraryFilter.java:179)

    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)

    to oracle.security.jps.ee.http.JpsAbsFilter$ 1.run(JpsAbsFilter.java:119)

    at java.security.AccessController.doPrivileged (Native Method)

    at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:315)

    at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:442)

    at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:103)

    at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:171)

    at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:71)

    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)

    at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:139)

    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)

    at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)

    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)

    to weblogic.servlet.internal.WebAppServletContext$ ServletInvocationAction.wrapRun (WebAppServletContext.java:3715)

    to weblogic.servlet.internal.WebAppServletContext$ ServletInvocationAction.run (WebAppServletContext.java:3681)

    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)

    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)

    at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2277)

    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2183)

    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1454)

    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)

    at weblogic.work.ExecuteThread.run(ExecuteThread.java:178)

    < ActionListenerImpl > < processAction > java.lang.NullPointerException

    javax.faces.el.EvaluationException: java.lang.NullPointerException

    at org.apache.myfaces.trinidad.component.MethodExpressionMethodBinding.invoke(MethodExpressionMethodBinding.java:51)

    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)

    at org.apache.myfaces.trinidad.component.UIXCommand.broadcast(UIXCommand.java:190)

    to oracle.adf.view.rich.component.fragment.ContextSwitchingComponent$ 1.run(ContextSwitchingComponent.java:92)

    at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent._processPhase(ContextSwitchingComponent.java:361)

    at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent.broadcast(ContextSwitchingComponent.java:96)

    at oracle.adf.view.rich.component.fragment.UIXInclude.broadcast(UIXInclude.java:102)

    to oracle.adf.view.rich.component.fragment.ContextSwitchingComponent$ 1.run(ContextSwitchingComponent.java:92)

    at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent._processPhase(ContextSwitchingComponent.java:361)

    at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent.broadcast(ContextSwitchingComponent.java:96)

    at oracle.adf.view.rich.component.fragment.UIXInclude.broadcast(UIXInclude.java:96)

    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475)

    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756)

    at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._invokeApplication(LifecycleImpl.java:889)

    at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._executePhase(LifecycleImpl.java:379)

    at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:194)

    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)

    to weblogic.servlet.internal.StubSecurityHelper$ ServletServiceAction.run (StubSecurityHelper.java:227)

    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)

    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)

    at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)

    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)

    at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:205)

    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)

    at oracle.adfinternal.view.faces.webapp.rich.RegistrationFilter.doFilter(RegistrationFilter.java:106)

    to org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$ FilterListChain.doFilter (TrinidadFilterImpl.java:446)

    at oracle.adfinternal.view.faces.activedata.AdsFilter.doFilter(AdsFilter.java:60)

    to org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$ FilterListChain.doFilter (TrinidadFilterImpl.java:446)

    at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl(TrinidadFilterImpl.java:271)

    at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:177)

    at org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92)

    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)

    at oracle.adf.library.webapp.LibraryFilter.doFilter(LibraryFilter.java:179)

    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)

    to oracle.security.jps.ee.http.JpsAbsFilter$ 1.run(JpsAbsFilter.java:119)

    at java.security.AccessController.doPrivileged (Native Method)

    at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:315)

    at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:442)

    at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:103)

    at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:171)

    at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:71)

    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)

    at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:139)

    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)

    at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)

    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)

    to weblogic.servlet.internal.WebAppServletContext$ ServletInvocationAction.wrapRun (WebAppServletContext.java:3715)

    to weblogic.servlet.internal.WebAppServletContext$ ServletInvocationAction.run (WebAppServletContext.java:3681)

    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)

    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)

    at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2277)

    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2183)

    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1454)

    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)

    at weblogic.work.ExecuteThread.run(ExecuteThread.java:178)

    Caused by: java.lang.NullPointerException

    dry. ControllerUtil.closeResultSet (ControllerUtil.java:136)

    dry. ControllerUtil.getUserPrivileges (ControllerUtil.java:118)

    dry. ControllerUtil.login (ControllerUtil.java:59)

    at sec.model.AppModuleImpl.login(AppModuleImpl.java:77)

    at sec.control.bean.LoginPage.loginAction(LoginPage.java:92)

    at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)

    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

    at java.lang.reflect.Method.invoke(Method.java:597)

    at com.sun.el.parser.AstValue.invoke (unknown Source)

    at com.sun.el.MethodExpressionImpl.invoke (unknown Source)

    at org.apache.myfaces.trinidad.component.MethodExpressionMethodBinding.invoke(MethodExpressionMethodBinding.java:46)

    ... more than 54

    {\code}

    Thanks in advance

    The particular error that causes the ORA-00904 exception, it's that you concatenate a string literal in the SQL statement without enclosing the literal with quotes. Replace the line

    "AND user_id =" + userId + "."

    with

    "AND user_id = '" + Userid + "'" +.

    Although it will work in this way, the concatenation of literal values variable to a SQL statement is a very wrong approach. The right approach is to use a placeholder variable (for example?) in the SQL statement and to link it with the necessary value after analysis of the declaration and before running. In this way, you will be able to analyze the statement once and execute it several times with different values without new analysis view the statement. Also, the SQL engine will be able to use its SQL cache if you try to analyze the statement even once again, which will significantly improve performance. However, if you concatenate variable literal value to education, engine SQL won't recognize the statement as one already analyzed, it will not use its cache and it will analyze the statement again from scratch. From a point of view shortly, the best approach is as follows:

    "" AND user_id =? ".

    and then

    = stat dbt.createPreparedStatement (sql, 1);

    stat.setString (1, userId); Don't forget to change the username to a string type in the method declaration

    RS = stat.executeQuery ();

    There are other problems in your code. First of all, the invocation closeResultSet (rs) after closeStatement (stat) is erroneous and obsolete, because when you close a SQLStatement instance it automatically closes all its result sets. Secondly, in the finally block you call closeStatement (stat), but there is no guarantee that stat variable is not null. For example, the variable stat can be null if the SQLStatement instance has not been established successfully in the try section above.

    Dimitar

  • Number of error SQL ORA-00904: invalid column name has occurred.

    Hello
    on P8.18 on a Win 2003 server when we launch SWPAUDIT, it failed with:
    Number of error SQL ORA-00904: invalid column name has occurred. Query process failed.
    I searched this error on metalink3. Nothing in connection with.

    Any idea?

    Thank you.

    Please give a clear picture of what you are doing... .and what paintings... There is the possibility of the audit refers to certain tables... with deleted. names of columns just look in the structure of what you audit?

    Please, find the name of column...

    ORA-00904: string: invalid identifier
    Cause: The column name entered is invalid or missing.
    Action: Enter a valid column name. A valid column name must start with a letter, must be less than or equal to 30 characters and include only alphanumeric characters and the special characters $, _, and #. If it contains other characters, then it must be enclosed in quotation marks. It cannot be a reserved word.

  • ORA-00904: 'TIMESTAMPADD': identifier invalido

    Hi all.

    Can help you with this error?

    ORA-00904: 'TIMESTAMPADD': identifier invalido

    I am trying this:

    SELECT (timestampadd (SQL_TSI_MONTH, 3, TIMESTAMP ' 2010-11-30 10:00:00 ')) FROM dual;

    TKS

    Simone

    Hello.

    Sorry for my confusion.

    It is a Timesten database. Not an oracle database.

    REF. http://docs.oracle.com/en/database/

    Tkss

  • HELP-immediate execution in PL/SQL has received the error ORA-00904: invalid identifier

    What is the problem with the following codes from PL/SQL (actually it comes to Oracle Metalink Note: 313175.1):
    ===========
    declare
    cursor c1 is select * from $ semantic;
    v_statement VARCHAR2 (255);
    v_nc number (10);
    v_nt number (10);
    Start
    immediate execution
    "select count (*) from $ semantics" in v_nc;
    immediate execution
    ' select count (distinct s_table_name) of semantics$ "in v_nt;
    dbms_output.put_line
    ('Edit' | v_nc |) 'columns ' | v_nt | "tables");
    to r1 c1 loop
    v_statement: = 'ALTER TABLE ' | R1.s_owner | '.' || R1.s_table_name;
    v_statement: = v_statement | «change (' |)» R1.s_column_name | ' ';
    v_statement: = v_statement | R1.s_data_type | ' (' | r1.s_char_length;)
    v_statement: = v_statement | ' CHAR))';
    immediately run v_statement;
    end loop;
    dbms_output.put_line ('Done');
    end;
    /
    =====
    Executed once the codes as sysdba against 10gr 2 database, I got this error:
    From build to select columns to change
    Editing columns 4428 35249
    declare
    *
    ERROR on line 1:
    ORA-00904: invalid identifier
    ORA-06512: at line 22

    I see nothing wrong with the line of "immediate execution". I appreciate your help!

    Thank you.

    Hello
    Try to print the offending instruction using exception, I used small test cases by changing the pl/sql block, you may need to change to respond to all other types of data in this table.

    CREATE TABLE semantics$
    AS
       SELECT USER AS owner,
              table_name,
              data_type AS s_data_type,
              column_name,
              data_length AS s_char_length
       FROM cols
       WHERE table_name = 'MY_OBJECTS';
    
    DECLARE
       CURSOR c1
       IS
          SELECT *
          FROM semantics$;
    
       v_statement   VARCHAR2 (255);
       v_nc          NUMBER (10);
       v_nt          NUMBER (10);
    BEGIN
       EXECUTE IMMEDIATE 'select count(*) from semantics$' INTO v_nc;
    
       EXECUTE IMMEDIATE 'select count(distinct table_name) from semantics$'
          INTO v_nt;
    
       DBMS_OUTPUT.put_line(   'ALTERing '
                            || v_nc
                            || ' columns in '
                            || v_nt
                            || ' tables');
    
       FOR r1 IN c1
       LOOP
          v_statement   := 'ALTER TABLE ' || r1.owner || '.' || r1.table_name;
          v_statement   := v_statement || ' modify (' || r1.column_name || ' ';
          v_statement   :=
             v_statement || r1.s_data_type || '(' || r1.s_char_length;
    
          IF (r1.s_data_type = 'NUMBER')
          THEN
             v_statement   := v_statement || '))';
          ELSE
             v_statement   := v_statement || ' CHAR))';
          END IF;
    
          DBMS_OUTPUT.put_line (v_statement);
    
          -- EXECUTE IMMEDIATE v_statement;
       END LOOP;
    
       DBMS_OUTPUT.put_line ('Done');
    EXCEPTION
       WHEN OTHERS
       THEN
          DBMS_OUTPUT.put_line ('Statement = ' || v_statement);
          DBMS_OUTPUT.put_line (SUBSTR (SQLERRM, 1, 200));
          RAISE;
    END;
    

    _ Output

    ALTERing 13 columns in 1 tables
    ALTER TABLE MY_OBJECTS modify (OWNER VARCHAR2(30 CHAR))
    ALTER TABLE MY_OBJECTS modify (OBJECT_NAME VARCHAR2(30 CHAR))
    ALTER TABLE MY_OBJECTS modify (SUBOBJECT_NAME VARCHAR2(30 CHAR))
    ALTER TABLE MY_OBJECTS modify (OBJECT_ID NUMBER(22))
    ALTER TABLE MY_OBJECTS modify (DATA_OBJECT_ID NUMBER(22))
    ALTER TABLE MY_OBJECTS modify (OBJECT_TYPE VARCHAR2(19 CHAR))
    ALTER TABLE MY_OBJECTS modify (CREATED DATE(7 CHAR))
    ALTER TABLE MY_OBJECTS modify (LAST_DDL_TIME DATE(7 CHAR))
    ALTER TABLE MY_OBJECTS modify (TIMESTAMP VARCHAR2(19 CHAR))
    ALTER TABLE MY_OBJECTS modify (STATUS VARCHAR2(7 CHAR))
    ALTER TABLE MY_OBJECTS modify (TEMPORARY VARCHAR2(1 CHAR))
    ALTER TABLE MY_OBJECTS modify (GENERATED VARCHAR2(1 CHAR))
    ALTER TABLE MY_OBJECTS modify (SECONDARY VARCHAR2(1 CHAR))
    Done
    

    Concerning

    Published by: OrionNet on January 5, 2009 23:53

    Published by: OrionNet on January 5, 2009 23:55

  • Help with the exception of Pl/SQL 'ora-3150 end of file on the communication channel.

    Hello.

    The code attached to this post opens a slider that load of 99 dblinks from different remote databases of different version.

    He captures the information from these databases and stores them locally on a central database (11.2.0.4.0 version) on different tables.

    The problem I have is that when a database is deleted, the dblink to this database show me the error 'ora-3150 end of file on communication channel' and that's right.

    But he's not going trough the exception that I created, the cursor is closed and does not continue with the cycle.

    The exception I created insert data on DBMONITOR error. DBMONITOR_LOG_ERROR_TABLE in order to catch the error (you'll be able to see all the code on the attachment)

    It's the exception:

    exception

    while others then

    INSERT IN DBMONITOR. DBMONITOR_LOG_ERROR_TABLE (NOMBRE_DBLINK, message, info, FECHA_ERROR, TIPO_PROCEDURE) VALUES (var, SUBSTR (DBMS_UTILITY. (FORMAT_ERROR_STACK, 1, 200), "CONNECTION ERROR", SYSDATE, 'CAPACITY');

    commit;

    end;

    Could help me please on how could intercept this exception?

    Thank you.

    Juan.

    You might have a problem with your connection or mishandling. The end of the file ora-3150, on channel of communication error means that there is a connection, but this link was broken somehow.

    If a database is not reachable, you should get other types of errors.

    For example judgment of the Kingdom or tns - memory could not resolve alias or simliar things.

    Here is a list of typical mistakes I have check and manage when accessing remote databases.

      e_db_link_broken EXCEPTION;  --ORA-02019 connection description for remote database not found
      PRAGMA EXCEPTION_INIT (e_db_link_broken, -02019);
      e_oracle_not_available EXCEPTION;  --ORA-01034 ORACLE not available
      PRAGMA EXCEPTION_INIT (e_oracle_not_available, -01034);
      e_oracle_down EXCEPTION;  --ORA-27101: shared memory realm does not exist
      PRAGMA EXCEPTION_INIT (e_oracle_down, -27101);
      e_no_listener EXCEPTION;  --ORA-12541: TNS:no listener
      PRAGMA EXCEPTION_INIT (e_no_listener, -12541);
      e_no_service EXCEPTION;  --ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
      PRAGMA EXCEPTION_INIT (e_no_service, -12514);
      e_timeout EXCEPTION;  --ORA-12170: TNS:Connect timeout occurred
      PRAGMA EXCEPTION_INIT (e_timeout, -12170);
    

    If you have a long open session and fail to close the db links after recovered information from the remote site?

    In addition, I propose to change your dynamic insertion in a normal insert.

    First extract the data of the DB link dynamically, but just with a select statement. Then do the insertion with the result data.

    Improve your logging table to store messages up to 4000 char CHARACTER. 200 is really small for error messages.

    In addition to the DBMS_UTILITY. FORMAT_ERROR_STACK you must also connect DBMS_UTILITY. FORMAT_ERROR_BACKTRACE. Just to see if you get a better message there.

    WHEN e_db_link_broken or e_oracle_not_available or e_oracle_down or e_no_listener or e_no_service or e_timeout THEN
       INSERT INTO DBMONITOR.DBMONITOR_LOG_ERROR_TABLE (NOMBRE_DBLINK, message, info,FECHA_ERROR,TIPO_PROCEDURE) VALUES(var, 'Remote DB not accessible','ERROR DE CONEXION',SYSDATE,'CAPACITY');
                   -- commit;
    WHEN OTHERS THEN
    
                    INSERT INTO DBMONITOR.DBMONITOR_LOG_ERROR_TABLE (NOMBRE_DBLINK, message, info,FECHA_ERROR,TIPO_PROCEDURE) VALUES(var, SUBSTR(DBMS_UTILITY.FORMAT_ERROR_STACK||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE, 1, 4000),'ERROR DE CONEXION',SYSDATE,'CAPACITY');
                    --commit;
                    end;
    
  • ORA-00904 on CREATE TABLE with a virtual column based on the XMLTYPE content

    Hello

    This is another one for the gurus of the syntax...

    Try the following, fails with ORA-00904: "MESSAGE". "' GETROOTELEMENT": invalid identifier
    CREATE TABLE XML_TEST_VIRT
      (
       MSG_TYPE         GENERATED ALWAYS AS (MESSAGE.GETROOTELEMENT()) VIRTUAL,
       MESSAGE  XMLTYPE             NOT     NULL,
       IE906    XMLTYPE             DEFAULT NULL
      )
       XMLTYPE COLUMN MESSAGE STORE AS SECUREFILE BINARY XML
       XMLTYPE COLUMN IE906   STORE AS SECUREFILE BINARY XML
    /
    While it succeeds
    CREATE TABLE XML_TEST_VIRT
      (
       MSG_TYPE         GENERATED ALWAYS AS (EXTRACT(MESSAGE, '/*').GETROOTELEMENT()) VIRTUAL,
       MESSAGE  XMLTYPE             NOT     NULL,
       IE906    XMLTYPE             DEFAULT NULL
      )
       XMLTYPE COLUMN MESSAGE STORE AS SECUREFILE BINARY XML
       XMLTYPE COLUMN IE906   STORE AS SECUREFILE BINARY XML
    /
    The GETROOTELEMENT from SYS member function. XMLTYPE is stated as "PARALLEL_ENABLE DETERMINISTIC" the method called is not the problem, as evidenced by the 2nd case.
    Using the MESSAGE column that is of type XMLTYPE directly seems to be the problem. But the question is "why." The result of the EXTRACT function is of type XMLTYPE and call his works of members, the column is also of type XMLTYPE still call its members fails...

    Thanks in advance for any ideas on that.

    Best regards
    Philippe

    Going on the means to go far, far back.

    2003 re: function getRootElement ORA-00904

  • The rights of the applicant, change of context (PL/SQL-&gt; SQL-&gt; PL/SQL) and ORA-00904

    Hello

    I'm doing a validation test of principle with regard to the rights of the applicant. I created 2 diagrams of Test (DEFINER1 and INVOKER1) for the same thing. When I call a procedure in the Invoker1 Definer1 and the procedure has, in turn, a SQL statement inside that a PL/SQL function calls, so he get ORA-00904 "" is not a valid identifier. All procedures/packages in the scheme of Definer1 are created as the rights of the applicant. Simplified script below for the same, kindly let me know if I make a mistake, it's the expected behavior, or miss me something.

    set line 10000

    Set feedback off

    ------------------------------------------------------------------------------------------------------------------------------

    QUICK problem: error ORA-00904: "object name": invalid identifier

    CALLS while the use of the appellant's rights, procedure call PL/SQL that has a SQL that calls a PL/SQL function.

    ------------------------------------------------------------------------------------------------------------------------------

    ------------------------------------------------------------------------------------------------------------------------------

    GUEST

    GUEST

    ------------------------------------------------------------------------------------------------------------------------------

    Creating patterns DEFINER1 and INVOKER1 QUICK...

    GUEST

    ------------------------------------------------------------------------------------------------------------------------------

    CREATE DEFINER1 USER IDENTIFIED BY DEFINER1

    TEMPORARY TEMP TABLESPACE

    /

    GRANT CREATE SESSION TO DEFINER1

    /

    GRANT CREATE PROCEDURE FOR DEFINER1

    /

    CREATE INVOKER1 USER IDENTIFIED BY INVOKER1

    TEMPORARY TEMP TABLESPACE

    /

    GRANT CREATE SESSION TO INVOKER1

    /

    GRANT CREATE PROCEDURE FOR INVOKER1

    /

    ------------------------------------------------------------------------------------------------------------------------------

    GUEST will now connect to the DEFINER1 schema...

    GUEST

    CONNECT DEFINER1/DEFINER1

    ------------------------------------------------------------------------------------------------------------------------------

    Creating QUICK package (with rights of Summoners) with 2 functions simple (one with PRAGMA RESTRICT_REFERENCES another without him.)...

    GUEST

    ------------------------------------------------------------------------------------------------------------------------------

    CREATE or REPLACE PACKAGE global_pkg

    AUTHID CURRENT_USER

    AS

    FUNCTION add2 (NUMBER of p1

    NUMBER of p2

    )

    RETURN NUMBER;

    FUNCTION add2_rr (NUMBER of p1

    NUMBER of p2

    )

    RETURN NUMBER;

    PRAGMA RESTRICT_REFERENCES (add2_rr, WNDS, WNPS, NSOR, RNP);

    END global_pkg;

    /

    ---------------------------------------------------------------

    CREATE OR REPLACE PACKAGE BODY GLOBAL_PKG

    AS

    ---------------------------------------------------------------

    FUNCTION add2 (NUMBER of p1

    NUMBER of p2

    )

    RETURN NUMBER

    IS

    BEGIN

    RETURN (p1 + p2);

    END add2;

    ---------------------------------------------------------------

    FUNCTION add2_rr (NUMBER of p1

    NUMBER of p2

    )

    RETURN NUMBER

    IS

    BEGIN

    RETURN (p1 + p2);

    END add2_rr;

    ---------------------------------------------------------------

    END global_pkg;

    /

    ------------------------------------------------------------------------------------------------------------------------------

    ENCOURAGE creating stand-alone simple function (with rights of Summoners)...

    GUEST

    ------------------------------------------------------------------------------------------------------------------------------

    FUNCTION to CREATE or REPLACE add2 (NUMBER of p1

    NUMBER of p2

    )

    RETURN NUMBER

    AUTHID CURRENT_USER

    IS

    BEGIN

    RETURN (p1 + p2);

    END ADD2;

    /

    ------------------------------------------------------------------------------------------------------------------------------

    PROMPT creation of procedure (with rights of Summoners) who calls the Package and functions...

    GUEST

    ------------------------------------------------------------------------------------------------------------------------------

    CREATE OR REPLACE PROCEDURE pr_tester

    AUTHID CURRENT_USER

    IS

    l_num NUMBER (2);

    BEGIN

    dbms_output.put_line (1 + 1 = ' | global_pkg.add2_rr (1,1));

    BEGIN

    SELECT global_pkg.add2_rr (1.1)

    IN l_num

    FROM DUAL;

    dbms_output.put_line ('worked..');

    EXCEPTION

    WHILE OTHERS

    THEN

    dbms_output.put_line ('global_pkg.add2_rr wo' |) SQLERRM);

    END;

    dbms_output.put_line (1 + 1 = ' | global_pkg.) ADD2 (1,1));

    BEGIN

    SELECT global_pkg.add2 (1.1)

    IN l_num

    FROM DUAL;

    dbms_output.put_line ('worked..');

    EXCEPTION

    WHILE OTHERS

    THEN

    dbms_output.put_line ('global_pkg.add2 wo' |) SQLERRM);

    END;

    dbms_output.put_line (1 + 1 = ' |) ADD2 (1,1));

    BEGIN

    SELECT add2 (1.1)

    IN l_num

    FROM DUAL;

    dbms_output.put_line ('worked..');

    EXCEPTION

    WHILE OTHERS

    THEN

    dbms_output.put_line ('add2 wo' |) SQLERRM);

    END;

    END;

    /

    ------------------------------------------------------------------------------------------------------------------------------

    Grant QUICK overlooking the procedure to INVOKER1 scheme...

    GUEST

    ------------------------------------------------------------------------------------------------------------------------------

    GRANT EXECUTE ON pr_tester TO invoker1

    /

    ------------------------------------------------------------------------------------------------------------------------------

    Test QUICK 1: Define schema works...

    GUEST

    ------------------------------------------------------------------------------------------------------------------------------

    SET SERVEROUTPUT ON

    BEGIN

    pr_tester;

    END;

    /

    ------------------------------------------------------------------------------------------------------------------------------

    GUEST

    GUEST

    GUEST

    GUEST will now connect to the INVOKER1 schema...

    GUEST

    CONNECT INVOKER1/INVOKER1

    ------------------------------------------------------------------------------------------------------------------------------

    Test FAST 2: Fails with ORA - 00904 define schema

    ------------------------------------------------------------------------------------------------------------------------------

    SET SERVEROUTPUT ON

    BEGIN

    definer1.pr_tester;

    END;

    /

    ------------------------------------------------------------------------------------------------------------------------------

    GUEST

    GUEST

    GUEST

    INVITE to drop the two schemas, enter the password for the sys

    ------------------------------------------------------------------------------------------------------------------------------

    CONNECT SYS AS SYSDBA

    DROP USER CASCADE DEFINER1

    /

    DROP USER INVOKER1

    /

    ------------------------------------------------------------------------------------------------------------------------------

    GUEST

    GUEST has dropped to users...

    ------------------------------------------------------------------------------------------------------------------------------

    Thank you

    Marie.

    Basically, you know the answer...

    Why you call procedure Tester pr_tester with the name of schema prefix (definer1.pr_tester) during his call of the schema of the invoker?

    Now... Imagine the following query runs under the scheme of the appellant:

    SELECT global_pkg.add2_rr (1.1)

    IN l_num

    FROM DUAL;

    the schema of the invoker 'knows' global_pkg?

    HTH

Maybe you are looking for

  • in the latest flashplayer webcam does not work, firefox 12 turns off old flash, a beautiful!

    I have installed the latest flash, like I always do, but my webcam is not working with it (a known issue at adobe)Their solution is to install an older version of flash.It worked well until today firefox decides to turn it off and force me to update

  • Drivers XP VGC-RT150Y

    Hi all I need drivers XP for VGC-RT150Y. The only one that I'm currently missing is the TV tuner driver/application. Any help would be really appreciated

  • After installing updates ms error 0x0000008e

    15 ms updates have been installed on January 11 after updates installed, I got error 0x0000008e and blue screen physical memory dumpI did system restore, now I have MSI flashing on the screen when I open that no matter what program clean boot still h

  • HP officejet pro x476dw poster code 0xc6fd0013

    HelloMy printer brand new display shows this code: 0xc6fd0013 and no longer works.I tried all the steps, prvided by manual, but without success.What is on with him, is it possible to solve the problem (and how?) or do I put HP?Thank you for the suppo

  • Since firmware update problem

    Hi all Just got my rocket and had problems with the message "90 MB" free to build music db, even if there is loads of free space. So I downloaded the update which updated to v 01.01.22.. After that, the music player just constantly jumps on all music