ORA-00904: "A". ' is not a valid identifier

Hi all

When creating visibility, get error: ORA-00904: "A." "" TRUNC ": invalid identifier

Published by: KaiS April 7, 2011 06:53

Hello

It must be trunc (a.IDATE) instead of a.trunc (IDATE)

see you soon

VT

Tags: Database

Similar Questions

  • 4EA3 monitor Sessions explain plan fails with ORA - 00904 SP. CHILD_ADDRESS is not a valid identifier.

    I'm running 64 Bit Windows JDK 7 connecting to Oracle DB 10.1.0.5.0. Access the Plan to explain in the tool monitor Sessions tab causes the error. This has been true in all 4. releases.

    Copy of the report of sessions monitor down to a user defined report, check out the SQL used in the Plan to explain tab and try to run in your 10.1.0.5 database. We do not support this version of the database, but you can change to the sql in your report defined by the user to work for this instance if necessary.

  • help on the merge statement is not a valid identifier

    I have a merge like statement below

    merger in emp a

    using (select ename, deptno, emp_tmp sal b)

    on (b.empno = a.empno)

    When matched then

    update the value of deptno = b.deptno,

    SAL = b.sal

    When not matched then

    values Insert (empno, SAL, DEPTNO) (b.empno, b.deptno, b.sal);

    It's throwing identifier not valid a.empno

    There must be a process, like, once the issue has been MARKED as ANSWER other than the author no one can answer this!

  • Procedure - is not a valid identifier

    I get the below error messages when I run the procedure below and I do not know why... .Please help. Thank you

    ERROR in line 8, col 17, ending_line 8, ending_col 18, found ': =', invalid identifier: =.
    Line ERROR 8 col 21, ending_line 8, ending_col 43, Found "07/28/2010,05/26/2010", Expecting: integer
    CREATE OR REPLACE PROCEDURE  planholderslist (
       p_letting_date   IN       VARCHAR2,
       p_results        OUT      sys_refcursor
    )
    AS


    p_letting_date  := ('07/28/2010,05/26/2010');         /***************this is where the error is pointing************ /

    BEGIN

       OPEN p_results FOR
          SELECT DISTINCT DECODE (TRIM (MIN (j.route)),
                                  NULL, 'N/A',
                                  TRIM (MIN (j.route))
                                 ) routenumber,
                          l.lcontid contractid, (q.cdescr) jobdescription,
                          INITCAP (q.clocat1 || q.clocat2) LOCATION,
                          SUBSTR (q.cprojnum, 1, 10) projectnumber,
                             SUBSTR (l.letting, 3, 2)
                          || '-'
                          || SUBSTR (l.letting, 5, 2)
                          || '-'
                          || SUBSTR (l.letting, 1, 2) lettingdate
                     FROM vendor v,
                          vendaddr r,
                          letprop l,
                          planhold p,
                          proposal q,
                          project j,
                          propproj k,
                          bidlet bd
                    WHERE v.vendor = r.vendor
                      AND k.contid = q.contid
                      AND k.pcn = j.pcn
                      AND l.lcontid = k.contid
                      AND p.vendor = v.vendor
                      AND l.letting = p.letting
                      AND (TO_CHAR (bd.datelet, 'MM/DD/YYYY') IN (
                                          SELECT COLUMN_VALUE
                                            FROM TABLE (in_varchar (p_letting_date)
                                                       ))
                          )
                      AND l.CALL = p.CALL
                      AND r.addrnum = p.billto
                      AND bd.letting = l.letting
                 GROUP BY q.cdescr,
                          q.clocat1,
                          q.clocat2,
                          bd.letting,
                          l.letting,
                          l.lcontid,
                          q.cprojnum;
    END planholderslist;
    /

    SQL > var results refcursor
    SQL > planholderslist exec (' 07/28/2010,05/26/2010 ',: results);
    SQL > print results

  • My script does not work... "IF is not a valid identifier. Line 211. Huh?

    Please help someone... I just try the script for update 1 card TEST env with the content of the l_default_code_comb_id in ORACLE Financials...
    SET serveroutput ON SIZE 1000000 FORMAT WRAPPED
    SET verify OFF
    SET feedback OFF
     
    DECLARE
    -- *********
    -- Debugging/error handling
    -- ********* 
    -- *********
    -- Work variables
    -- *********
     
       p_emp_number          VARCHAR2 (14);
       v_rec_cnt                        NUMBER    := 0;
       insert_flag                      VARCHAR2 (8);
       job_exists                     VARCHAR2 (8);
       err_num NUMBER;
       err_msg VARCHAR2(150); 
       err_line  VARCHAR2(350); 
       err_seq     NUMBER := 0;
    
    l_date               DATE :=  SYSDATE; 
    l_validate          BOOLEAN       DEFAULT FALSE;
    
       l_ass_obj            NUMBER;
       l_emp_obj           NUMBER;
    
    l_default_code_comb_id      NUMBER     := 217269;
    l_datetrack_update_mode VARCHAR2(30) := 'CORRECTION';
    l_organization_id                NUMBER     := 0;
    l_concatenated_segments    VARCHAR2(240);
    l_soft_coding_keyflex_id      NUMBER;
    l_comment_id      NUMBER;
    l_effective_end_date DATE := TO_DATE('17-FEB-2059','DD-MON-YYYY');  
    l_no_managers_warning    BOOLEAN;
       l_special_ceiling_step_id        NUMBER;
       l_people_group_id                NUMBER;
       l_group_name                     VARCHAR2 (30);
       l_entries_changed_warning        VARCHAR2 (30);
       l_spp_delete_warning             BOOLEAN;
       l_org_now_no_manager_warning     BOOLEAN;
       l_tax_district_changed_warning   BOOLEAN;
    l_other_manager_warning          BOOLEAN;
    l_business_group_id      NUMBER := 0;
    l_person_id                      NUMBER;
    l_assignment_number              VARCHAR2 (35);
    l_style                          VARCHAR2 (4)   := 'GB';
    ip_p_address_id       NUMBER; 
    
    l_effective_date   DATE  := SYSDATE;
    l_date_from  DATE  := SYSDATE; 
    l_date_to  DATE  := NULL; 
    
    
    -- *****************************************
    -- CURSOR 1 - get all Existing Employees (well, for testing purps.. just Peter Barlow for now..)
    -- *****************************************
    
       CURSOR c_get_employee_details
       IS
    
      SELECT DISTINCT per.person_id, per.EMPLOYEE_NUMBER, per.full_name, paas.assignment_id,
         paas.supervisor_id,paas.default_code_comb_id
      FROM per_all_people_f per, per_all_assignments_f paas
      WHERE per.employee_number = p_emp_number 
      AND paas.person_id(+) = per.person_id
      AND per.person_id = '30188';
    
    -- *****************************************
    -- CURSOR 2 - get all Existing Employees (well, for testing purps.. just Peter Barlow for now..)
    -- *****************************************
    
       CURSOR c_check_employee (p_emp_number VARCHAR2)
       IS
    
      SELECT DISTINCT per.person_id, per.EMPLOYEE_NUMBER, per.full_name, paas.assignment_id,
         paas.supervisor_id,paas.default_code_comb_id
      FROM per_all_people_f per, per_all_assignments_f paas
      WHERE per.employee_number = p_emp_number 
      AND paas.person_id(+) = per.person_id
      AND per.person_id = '30188';
     
       emp_rec                 c_check_employee%ROWTYPE;
    
    -- *****************************************
    -- Cursor 3 to SELECT all existing Employees that DO NOT have a JOB specified. 
    -- *****************************************
    
       CURSOR c_check_emps_job (p_emp_number VARCHAR2)
       IS
    
      SELECT DISTINCT per.person_id, per.full_name, paas.assignment_id,
         paas.supervisor_id,paas.default_code_comb_id
      FROM per_all_people_f per, per_all_assignments_f paas
      WHERE per.employee_number = p_emp_number 
      AND paas.person_id(+) = per.person_id
      AND paas.job_id IS NULL
      AND per.person_id = '30188';
    
       empjob_rec                          c_check_emps_job%ROWTYPE; 
    
    -- ***************************************************
    -- Cursor 4 retrieves latest Object Version Number from per_assignments_f table..
    -- ***************************************************
     
    CURSOR csr_ass_ovn (cp_person_id IN per_all_people_f.person_id%TYPE)
       IS
          SELECT MAX(paas.object_version_number)
            FROM per_assignments_f paas, per_all_people_f per
           WHERE paas.person_id = per.person_id 
             AND per.employee_number = paas.assignment_number
             AND per.person_id = cp_person_id;
    
    
    BEGIN
    
    -- ***********************************
    -- UPDATE of EXISTING Employees Details from work table..
    -- ***********************************
     
       FOR v_emp IN c_get_employee_details
       LOOP
     
    -- ************************************
    -- determine whether customer already exists
    -- ************************************
          OPEN c_check_employee (v_emp.employee_number);
    
           FETCH c_check_employee
           INTO emp_rec;
    
           IF c_check_employee%FOUND
          THEN       insert_flag := 'I';
    
          DBMS_OUTPUT.PUT_LINE ( 'Employee No: '    ||v_emp.employee_number );
    
          ELSE     
        DBMS_OUTPUT.PUT_LINE ( 'Employee No: '    ||v_emp.employee_number  || '  has not been found!  ' ); 
    
         insert_flag := 'X';
          END IF;
     
          CLOSE c_check_employee;
    
    -- ********************************************
    -- determine which customers already have been assigned a Job
    -- ********************************************
    
    /*  OPEN c_check_emps_job (v_emp.employee_number);
    
           FETCH c_check_emps_job
           INTO empjob_rec;
    
           IF c_check_emps_job%FOUND
          THEN       job_exists := 'X';   -- so we're wanting all those with job_exists := 'X'..
          ELSE        job_exists := 'I';
          END IF;
     
          CLOSE c_check_employee;
    */
    
     
    -- ************************************
    -- Obtain the most recent Object Version Number..
    -- ************************************
     
           OPEN csr_ass_ovn (v_emp.person_id);   
         FETCH csr_ass_ovn INTO l_ass_obj;
          CLOSE csr_ass_ovn; 
    
    -- *****************************************************
    -- Now Update PER_ALL_PEOPLE_F and PER_ASSIGNMENTS with default Cost Code '9999'
    --*****************************************************
    
           IF insert_flag = 'I'  
    
          THEN
         
             BEGIN                             -- Importing Emp Job, Default Cost Code and Supervisor details --
    
                  Hr_Assignment_Api.update_emp_asg
                            (p_validate                    => l_validate,
                             p_effective_date              => SYSDATE,  -- l_date,
                             p_datetrack_update_mode       => l_datetrack_update_mode,
                             p_assignment_id               =>  v_emp.assignment_id,           --- ** REQUIRED FIELD **
                             p_object_version_number       => l_ass_obj,
                             p_supervisor_id               => v_emp.supervisor_id,     
                             p_default_code_comb_id        => l_default_code_comb_id,
                             p_concatenated_segments       => l_concatenated_segments,
                             p_soft_coding_keyflex_id      => l_soft_coding_keyflex_id,
                             p_comment_id                  => l_comment_id,
                             p_effective_start_date        => l_date,     --IN/OUT
                             p_effective_end_date          => l_effective_end_date,
                             p_no_managers_warning         => l_no_managers_warning,
                             p_other_manager_warning       => l_other_manager_warning
                            );
    
       Hr_Assignment_Api.update_emp_asg_criteria
                 (p_validate                          => l_validate,
                  p_effective_date                    => SYSDATE,       -- l_date,
                  p_datetrack_update_mode             => l_datetrack_update_mode,
                  p_assignment_id                     =>    v_emp.assignment_id,           --- ** REQUIRED FIELD **
                  p_object_version_number             => l_ass_obj,
                  p_organization_id                   => l_organization_id,          
    --            p_location_id                       => std_location_id,
    --            p_job_id                            => l_job_id,
    --            p_position_id                       => std_position_id,
                  p_special_ceiling_step_id           => l_special_ceiling_step_id,
                  p_effective_start_date              => l_date,
                  p_effective_end_date                => l_effective_end_date,
                  p_people_group_id                   => l_people_group_id,
                  p_group_name                        => l_group_name,
                  p_org_now_no_manager_warning        => l_org_now_no_manager_warning,
                  p_other_manager_warning             => l_other_manager_warning,
                  p_spp_delete_warning                => l_spp_delete_warning,
                  p_entries_changed_warning           => l_entries_changed_warning,
                  p_tax_district_changed_warning      => l_tax_district_changed_warning
                 );
    
        DBMS_OUTPUT.PUT_LINE ( ' Employee Updated..:'  || v_emp.employee_number  );
    
    -- ******************************
    -- End of customer related details
    -- ******************************
          END IF;
       END LOOP;
     
       COMMIT;
    
               EXCEPTION
    
         WHEN NO_DATA_FOUND THEN    ROLLBACK;
    -- DBMS_OUTPUT.PUT_LINE ( '"No Data Found" for Employee:'  || v_emp.employee_number || SQLERRM );
              
             WHEN OTHERS THEN    ROLLBACK;
    
                       err_num := TO_CHAR(SQLCODE);       
                         err_msg := SUBSTR(SQLERRM, 1 , 150);
                       err_line := 'Oracle error (seqno=' || err_seq || ') ' || 
                        err_num ||' occurred processing record '|| 
              TO_CHAR(v_rec_cnt + 1) ||' : '||err_msg;
                        DBMS_OUTPUT.PUT_LINE(err_line);
    
    
                       INSERT INTO SU_SL_ERRORS VALUES (err_num, err_msg,SYSTIMESTAMP); 
    
    END;
    / 
     
    EXIT;
    Thank you for loooking...
    Steven

    In this section of the code:

    -- *****************************************************
    -- Now Update PER_ALL_PEOPLE_F and PER_ASSIGNMENTS with default Cost Code '9999'
    --*****************************************************
    
           IF insert_flag = 'I'
    
          THEN
    
             BEGIN
          -- Importing Emp Job, Default Cost Code and Supervisor details --
    
                  Hr_Assignment_Api.update_emp_asg
                            (p_validate                    => l_validate,
                             p_effective_date              => SYSDATE,  -- l_date,
                             p_datetrack_update_mode       =>
          l_datetrack_update_mode,
                             p_assignment_id               =>  v_emp.assignment_id
          ,          --- ** REQUIRED FIELD **
                             p_object_version_number       => l_sex_obj,
                             p_supervisor_id               => v_emp.supervisor_id,
                             p_default_code_comb_id        =>
          l_default_code_comb_id,
                             p_concatenated_segments       =>
          l_concatenated_segments,
                             p_soft_coding_keyflex_id      =>
          l_soft_coding_keyflex_id,
                             p_comment_id                  => l_comment_id,
                             p_effective_start_date        => l_date,     --IN/OUT
                             p_effective_end_date          => l_effective_end_date
          ,
                             p_no_managers_warning         =>
          l_no_managers_warning,
                             p_other_manager_warning       =>
          l_other_manager_warning
                            );
    
       Hr_Assignment_Api.update_emp_asg_criteria
                 (p_validate                          => l_validate,
                  p_effective_date                    => SYSDATE,       -- l_date,
                  p_datetrack_update_mode             => l_datetrack_update_mode,
                  p_assignment_id                     =>    v_emp.assignment_id,
          --- ** REQUIRED FIELD **
                  p_object_version_number             => l_sex_obj,
                  p_organization_id                   => l_organization_id,
    --            p_location_id                       => std_location_id,
    --            p_job_id                            => l_job_id,
    --            p_position_id                       => std_position_id,
                  p_special_ceiling_step_id           => l_special_ceiling_step_id
          ,
                  p_effective_start_date              => l_date,
                  p_effective_end_date                => l_effective_end_date,
                  p_people_group_id                   => l_people_group_id,
                  p_group_name                        => l_group_name,
                  p_org_now_no_manager_warning        =>
          l_org_now_no_manager_warning,
                  p_other_manager_warning             => l_other_manager_warning,
                  p_spp_delete_warning                => l_spp_delete_warning,
                  p_entries_changed_warning           => l_entries_changed_warning
          ,
                  p_tax_district_changed_warning      =>
          l_tax_district_changed_warning
                 );
    
        DBMS_OUTPUT.PUT_LINE ( ' Employee Updated..:'  || v_emp.employee_number  )
          ;
    
    -- ******************************
    -- End of customer related details
    -- ******************************
          END IF;
    

    You have a BEGIN block inside your statement without END to the match.

  • PL/SQL: ORA-00904 invalid identifier, PLS-00225: reference of the subprogram or cursor is out of reach

    Hi gurus,

    Your help is greatly appreciated.

    Will I have a fucntion where we have the object it contains.

    The changes that I have doen are: 2 new cusrosrs, but its failure with the error below.

    Highlighted are the changes I made. his length very well before your help is greatly appreciated.

    1) PL/SQL: ORA-00904: "GET_ACQ_ID.". ' ACQ_ID ': invalid identifier.

    (2) PLS-00225: subprogram or cursor reference 'GET_ACQ_ID' is out of range

    Here is the code:

    _________________________________________________________________________

    FUNCTION GET_IP_COMM_INFO return PROD. TERMINAL_IP_COMM_INFO_TAB IS

    vTer TER.ter_id%TYPE;
    vAPPL_ID TAC.appl_id%TYPE;
    vValue TSF.vALUE%TYPE;

    IP_COMM_INFO_LIST PROD. TERMINAL_IP_COMM_INFO_TAB: = PROD. TERMINAL_IP_COMM_INFO_TAB();

    CURSOR GET_ACQ_ID IS
    SELECT ACQ_ID
    TER TAHA, MERC M, PROF
    WHERE T.MER_ID = M.MER_ID
    AND M.PROFID = P.PROF_ID
    AND T.TER_ID = vTer_id;


    CURSOR GET_INFO_CURSOR IS
    SELECT H.DESCRIPTION AS HOST_DESCRIPTION
    PROD. HOST H, PROD. APP_IP_COMM_ACCESS_INFO AICAI
    WHERE (AICAI. HOST_ID = H.HOST_ID) and
    (AICAI. APPL_ID = vAPPL_ID);

    CURSOR GET_ACQ_CURSOR IS
    SELECT H.DESCRIPTION AS HOST_DESCRIPTION
    PROD. HOST H, PROD. APP_IP_COMM_ACCESS_INFO AICAI, PROD. ACQUIRER_IP_COMM_ACCESS_INFO ACICAI
    WHERE (AICAI. HOST_ID = H.HOST_ID) and
    (AICAI. APPL_ID = vAPPL_ID) AND
    (ACQUIRER_ID = GET_ACQ_ID. ACQ_ID);
    BEGIN

    vTer_id: = GLOBAL_VARIABLES.gv_ref_Ter_id;

    BEGIN
    SELECT the VALUE IN vvalue OF Tsf
    WHERE TER_id = vTEr_ID AND APPL_ID is vAPPL_ID and FEATURE_ID = 861;.

    Vvalue = '04' IF THEN
    For GET_ACQ_REC IN GET_ACQ_CURSOR
    LOOP
    IP_COMM_INFO_LIST. EXTEND;
    IP_COMM_INFO_LIST (IP_COMM_INFO_LIST. (COUNTY): = PROD. TERMINAL_IP_COMM_INFO_OBJ (GET_ACQ_REC. HOST_DESCRIPTION);
    END LOOP;
    ON THE OTHER
    FOR GET_INFO_REC IN GET_INFO_CURSOR
    LOOP
    IP_COMM_INFO_LIST. EXTEND;
    IP_COMM_INFO_LIST (IP_COMM_INFO_LIST. (COUNTY): = PROD. TERMINAL_IP_COMM_INFO_OBJ (GET_INFO_REC. HOST_DESCRIPTION);
    END LOOP;
    END IF;

    RETURN IP_COMM_INFO_LIST;
    EXCEPTION WHEN OTHERS THEN
    LIFT;
    END GET_IP_COMM_INFO;

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

    You try to access another variable of slider within the slider...

    CURSOR GET_ACQ_CURSOR IS

    SELECT H.DESCRIPTION AS HOST_DESCRIPTION

    PROD. HOST H, PROD. APP_IP_COMM_ACCESS_INFO AICAI, PROD. ACQUIRER_IP_COMM_ACCESS_INFO ACICAI

    WHERE (AICAI. HOST_ID = H.HOST_ID) and

    (AICAI. APPL_ID = vAPPL_ID) AND

    (ACQUIRER_ID = GET_ACQ_ID. ACQ_ID );

    But you have not opened this slider, or anything like that.

    You will probably need to pass as a parameter, just like a function:

    (not sure of the type of data, so I assumed that the NUMBER)

    CURSOR GET_ACQ_CURSOR (NUMBER in_acq_id) IS

    SELECT H.DESCRIPTION AS HOST_DESCRIPTION

    PROD. HOST H, PROD. APP_IP_COMM_ACCESS_INFO AICAI, PROD. ACQUIRER_IP_COMM_ACCESS_INFO ACICAI

    WHERE (AICAI. HOST_ID = H.HOST_ID) and

    (AICAI. APPL_ID = vAPPL_ID) AND

    (ACQUIRER_ID = in_acq_id );

    When you call this type, you must pass a value... So, it seems that you first call the other cursor.

    Change this code:

    IF Vvalue = ' 04 "THEN

    FOR GET_ACQ_REC IN GET_ACQ_CURSOR

    LOOP

    IP_COMM_INFO_LIST. EXTEND;

    IP_COMM_INFO_LIST (IP_COMM_INFO_LIST. (COUNTY): = PROD. TERMINAL_IP_COMM_INFO_OBJ (GET_ACQ_REC. HOST_DESCRIPTION);

    END LOOP;

    ON THE OTHER

    To do this:

    IF Vvalue = ' 04 "THEN

    FOR GET_ACQ_ID_REC IN GET_ACQ_ID IS

    LOOP

    FOR GET_ACQ_REC IN GET_ACQ_CURSOR (get_acq_id_rec.acq_id)

    LOOP

    IP_COMM_INFO_LIST. EXTEND;

    IP_COMM_INFO_LIST (IP_COMM_INFO_LIST. (COUNTY): = PROD. TERMINAL_IP_COMM_INFO_OBJ (GET_ACQ_REC. HOST_DESCRIPTION);

    END LOOP;

    END LOOP;

    ON THE OTHER

    (Or something like that)

    I wasn't sure if your GET_ACQ_ID cursor returns only 1 row or not? If it returns more than 1 row, how to cope, you do not specify.

    If it's just 1 row, then you can probably simplify it a little more:

    IF Vvalue = ' 04 "THEN

    SELECT ACQ_ID

    in l_acq_id

    TER TAHA, MERC M, PROF

    WHERE T.MER_ID = M.MER_ID

    AND M.PROFID = P.PROF_ID

    AND T.TER_ID = vTer_id;

    FOR GET_ACQ_REC IN GET_ACQ_CURSOR (l_acq_id)

    LOOP

    IP_COMM_INFO_LIST. EXTEND;

    IP_COMM_INFO_LIST (IP_COMM_INFO_LIST. (COUNTY): = PROD. TERMINAL_IP_COMM_INFO_OBJ (GET_ACQ_REC. HOST_DESCRIPTION);

    END LOOP;

    ON THE OTHER

    Hope that helps.

  • The rights of the applicant, change of context (PL/SQL-> SQL-> 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

  • 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.

  • ORA-00904 on upgrade of database

    I was running without fix 10.2.0.1.0 Oracle x 64 on Windows XP x 64. Our philosophy of these products has been that if it ain't broke, don't break with updates, but we are forced to update by federal regulation. As we go through the trouble, we decided on 11.1.0.X to match all our other facilities.

    I backed up the database before doing anything. I've migrated the ASM instance for 11.1.0.7 successfully. Then I patched the 10.2.0.5 database successfully, so that the zone versions would correspond. I started the all invalid objects recompile, but whenever I recompiled some, others would be present as invalid. I had a script that goes through this during about an hour before you abandon it, read somewhere that the upgrade process is recompiled invalid objects. After relinquishing to recompile everything, I put all the environment variables for the 11.1 database, and ran the upgrade of database. During the stage of "Upgrading Oracle Workspace Manager", I got an error ORA-00904 and messages on an invalid identifier and no data found. It gives me the option "Cancel" or "ignore".

    I don't know what to do at this point. I didn't even know about the workspace far Manager. I guess by ignoring the error is not sure, but that is just, based on previous experiences of calculation. Give up everything to restore to the State it was in before the upgrade? I can restore the original software and restart the process, but I don't know what I have to do differently. I also ignored warnings of statistics the optimizer vitiated in schemas sys and sysman (after the collection of statistics for the whole of the base), patterns with objects dependent of network packets (the guide says to set the ACL after the upgrade) and a warning that the control of Enterprise Manager repository exists in the database (that I have not used since we first installed the base data).

    OWM has a history of problems with upgrade. Ignore and it will be not upgraded after this upgrade 'failed' and it isn't a problem if you do not use. Of course, no one likes to discover such a problem, but after the end of the level and after the patch you should be able to upgrade the Workspace Manager simply with a performance of $ORACLE_HOME/rdbms/admin/owmupgrd.plb
    http://download.Oracle.com/docs/CD/B28359_01/AppDev.111/b28396/long_migrate.htm
    (I suggest you reproduce the whole process on a test 10.2.0.5 database for make your own conclusion of course)

    Published by: Philippe Florent Sep 19, 2010 01:07 - added link to the doc

  • 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

  • Search and apply reception error: ORA-00904: "ON_ACCT_PO_NUM": not valid

    Hello

    We get an error when you try to apply revenues, ORA-00904: "ON_ACCT_PO_NUM": invalid identifier. Found some Metalink:

    Find and apply functionality Arxrwmai filled with ORA-00904: error "ON_ACCT_PO_NUM" [388202.1 ID]
    ARXRWMAI: ORA-00904: "On_acct_po_num": invalid identifier, applying the reception [564612.1 ID]
    ARP_PROCESS_APPLICATION is not valid - PLS-00302: component 'ON_ACCT_CUST_ID' must be declared [577194.1 ID]

    Basically all suggest that the columns (IE ON_ACCT_PO_NUM) are missing in AR_RECEIVABLE_APPLICATIONS. Check these tables and columns are actually there, however, I ran SQL > @$AR_TOP/patch/115/sql/arvrrapp.sql (the version is 115.26.15104.3). And re-tested, always a problem. Audit to verify what patches have been applied recently that could cause this.

    RDBMS: 11.2.0.1.0
    Oracle Applications: 11.5.10.2

    Thank you
    -Steve

    Hi steve;

    Check use select * ad_bugs and check patch that applied using the applied date column

    * PS: patch 5359197 is exist on your server that is mentioned on the research and apply feature Arxrwmai ends with ORA-00904: error "ON_ACCT_PO_NUM" [388202.1 ID] *.

    Respect of
    HELIOS

  • ORA-02421: missing or not valid schema authorization identifier

    Hello Evryone,

    I'm having a problem with the session of the user schema. I'm not able to change the schema that it even exists.
    SQL>ALTER session SET CURRENT_SCHEMA='QA'
    Error report:
    SQL Error: ORA-02421: missing or invalid schema authorization identifier
    02421. 00000 -  "missing or invalid schema authorization identifier"
    *Cause:    the schema name is missing or is incorrect in an authorization
               clause of a create schema statement.
    *Action:   If the name is present, it must be the same as the current
               schema.
    
    
    SQL>select username, account_status from DBA_USERS where username='QA';
    
    USERNAME                       ACCOUNT_STATUS                   
    ------------------------------ -------------------------------- 
    QA                                        OPEN                             
    
    SQL>SHOW user
    
    USER is SYSTEM
    
    SQL> select * from v$version;
    
    BANNER
    --------------------------------------------------------------------------------
    Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
    PL/SQL Release 11.2.0.2.0 - Production
    CORE    11.2.0.2.0      Production
    TNS for HPUX: Version 11.2.0.2.0 - Production
    NLSRTL Version 11.2.0.2.0 - Production

    Try it without the single quotes.

    Best regards

    mseberg

    Test on mine:

    Release 11.2.0.1.0 - 64 bit production

    I get the same error with quotes

    ERROR on line 1:
    ORA-02421: missing or not valid schema authorization identifier

    Published by: mseberg on August 15, 2011 14:50

    So, this and then check

    ALTER SESSION SET CURRENT_SCHEMA=QA
    

    You can check it using this:

    select sys_context('USERENV','SESSION_SCHEMA') from dual;
    

    Published by: mseberg on August 15, 2011 15:08

  • What's * NOT * less out error with ORA-00904?

    SQL> select * from v$version;
    
    BANNER
    --------------------------------------------------------------------------------
    Oracle Database 11g Express Edition Release 11.2.0.2.0 - Beta
    PL/SQL Release 11.2.0.2.0 - Beta
    CORE    11.2.0.2.0      Production
    TNS for 32-bit Windows: Version 11.2.0.2.0 - Beta
    NLSRTL Version 11.2.0.2.0 - Production
    
    
    
    SQL> drop table t1;
    
    Table dropped.
    
    SQL> drop table t2;
    
    Table dropped.
    
    SQL> create table t1 (some_order_line_id number);
    
    Table created.
    
    SQL> create table t2 (order_line_id number);
    
    Table created.
    
    SQL> SELECT order_line_id FROM t1
      2  /
    SELECT order_line_id FROM t1
           *
    ERROR at line 1:
    ORA-00904: "ORDER_LINE_ID": invalid identifier
    
    
    SQL> SELECT * FROM t2 WHERE order_line_id IN (SELECT order_line_id FROM t1);
    
    no rows selected
    
    SQL>
    If it's in the manual, please point to me. I fully expect it give me the error the second time around.

    PS:
    It was the same in 11 GR 2 Enterprise Edition too.

    Published by: RPuttagunta on August 16, 2011 12:53

    No, you cannot rewrite the query it.

    SELECT * FROM t2 WHERE t2.order_line_id IN (SELECT t2.order_line_id FROM t1);
    

    would be equivalent to

    SELECT *
      FROM t2
     WHERE t2.order_line_id IS NOT NULL
       AND EXISTS (
        SELECT 1
          FROM t1
        )
    

    If you assume that T1 has at least one line and that T2. ORDER_LINE_ID is NOT NULL, it is equivalent to

    SELECT *
      FROM t2
    

    For each row in T2, Oracle would choose the T2. ORDER_LINE_ID of T1. Assuming that T1 has at least one line and that ORDER_LINE_ID is NOT NULL, it will come back N rows with values not equal NULL (1 row for each row of T1). The IN, by definition, could be set to TRUE.

    Thus, while it is a valid syntax, it is very unlikely that the syntax that you'd really like.

    Justin

  • ORA-00904: "DATA". "" AM ": invalid identifier

    Hello
    I am facing upwards a situation I can't find why is the error ora-00904 appears.
    I wrote the request as follows:

    (A)

    with data as
      (
      select uc.* 
        from user_computer uc
         where computer_name like '%'||:perioxi||'%'
      )
      select uc.* 
        from user_computer uc
        where exists (select 1
                       from data
                       where data.am = uc.am)
         and exists (select 1
                          from v_misthotoi_orga
                          where uc.am = v_misthotoi_orga.matr) 
    

    Where the utilisateur_ordinateur is a table, and the v_misthotoi_orga is a db view (a view that is based on another view that is based on a table that is accessed through a dblink).
    A query runs without error.

    (B)

    with data as
      (
      select uc.* 
        from user_computer uc
         where computer_name like '%'||:perioxi||'%'
      )
      select uc.* 
        from user_computer uc
        where exists (select 1
                       from data
                       where data.am = uc.am)                       <.... THE DATACOLUMN DATA.AM IS USED, WITHOUT ERROR                
         and exists (select 1
                          from v_misthotoi_orga
                          where data.am = v_misthotoi_orga.matr)    <.....THIS IS WHERE THE ERROR IS LOCATED (DATA.AM)
    

    The above query (application B) stops with error: ORA-00904: "DATA". "" AM ": invalid identifier.

    You can identify the cause of the error, since the datacolumn 'am' in 'data' datasource is used twice in query B.
    In the first instance without any error in the second with the error.

    Note: Oracle db v.2
    Thank you
    SIM

    Hey Sim,

    Change

    select 1
    from v_misthotoi_orga
    where data.am = v_misthotoi_orga.matr
    

    TO

    select 1
    from v_misthotoi_orga,
           data  
    
    where data.am = v_misthotoi_orga.matr
    

    In this query, Oracle knows no data unless you specify in the From clause that he should use.

    HTH,

    Stefan

  • ORA-00904: "ORA_ROWSCN": invalid identifier

    Get this error when trying to open tables in SQL Developer and data display.

    ORA-00904: "ORA_ROWSCN": invalid identifier

    Found a very old thread talking about this error, and now it's happening with me with SQL Developer Version on a Mac/Yosemite 4.1.1.19.

    https://community.Oracle.com/thread/1019844

    It happened for awhile and I didn't say anything because I can run a select statement * and get all the data I need. But it is bit boring so wonder if it's a bug that's resurfaced? Anyone else seeing this? Apparently not, because there seems to be no recent discussions on this subject, but maybe I'm not find them.

    Earl

    References to the built-in ORA_ROWSCN function should not return the message "invalid identifier" when connected to Oracle 10 g R1 or higher.  When you connect to a pre - 10 g R1, uncheck the box use ORA_ROWSCN for DataEditor insert and update statements in Tools > Preferences > Database > Object Viewerr.

    Edit:

    Oracle 10 g or higher, tables with a policy defined on them will know it: ORA-00904: 'ORA_ROWSCN': invalid makes unusable 2.1.0.63 output

    Edit2:

    More information, if you wish: using ora_rowscn on a table FGAC: bug?

Maybe you are looking for