stored pls ora must identificador error declared declarar debe dbms_lock dbms_lob oracle function plsql

oracle - ora - pls-00201 el identificador se debe declarar



PLS-00201-el identificador debe ser declarado (3)

Al crear la TABLA en B2BOWNER , asegúrese de prefijar la función PL / SQL con el nombre del esquema; es decir, B2BOWNER.F_SSC_Page_Map_Insert .

No me di cuenta de esto hasta que los DBA lo señalaron. Podría haber creado la tabla bajo mi raíz USER / SCHEMA y la función PL / SQL habría funcionado bien.

Ejecuté un script PL / SQL que creó la siguiente tabla

TABLE_NAME VARCHAR2(30) := ''B2BOWNER.SSC_Page_Map'';

Hice una función de inserción para esta tabla usando argumentos

CREATE OR REPLACE FUNCTION F_SSC_Page_Map_Insert( p_page_id IN B2BOWNER.SSC_Page_Map.Page_ID_NBR%TYPE, p_page_type IN B2BOWNER.SSC_Page_Map.Page_Type%TYPE, p_page_dcpn IN B2BOWNER.SSC_Page_Map.Page_Dcpn%TYPE)

Se me notificó que tenía que declarar B2BOWNER.SSC_Page_Map antes de que apareciera como un argumento a mi función. ¿Por qué estoy recibiendo este error?

EDITAR : error real

Warning: compiled but with compilation errors Errors for FUNCTION F_SSC_PAGE_MAP_INSERT LINE/COL ERROR -------- ----------------------------------------------------------------- 2/48 PLS-00201: identifier ''SSC_PAGE_MAP.PAGE_ID_NBR'' must be declared 0/0 PL/SQL: Compilation unit analysis terminated

EDITAR: Completa la función PL / SQL

RETURN INTEGER IS TABLE_DOES_NOT_EXIST exception; PRAGMA EXCEPTION_INIT(TABLE_DOES_NOT_EXIST, -942); -- ORA-00942 BEGIN INSERT INTO B2BOWNER.SSC_Page_Map VALUES( p_page_id, p_page_type, p_page_dcpn); RETURN 0; EXCEPTION WHEN TABLE_DOES_NOT_EXIST THEN RETURN -1; WHEN DUP_VAL_ON_INDEX THEN RETURN -2; WHEN INVALID_NUMBER THEN RETURN -3; WHEN OTHERS THEN RETURN -4; END; SHOW ERRORS PROCEDURE F_SSC_Page_Map_Insert; GRANT EXECUTE ON F_SSC_Page_Map_Insert TO B2B_USER_DBROLE; RETURN INTEGER

EDITAR: cambio los argumentos y recibí un nuevo error relacionado con el comando de inserción

CREATE OR REPLACE FUNCTION F_SSC_Page_Map_Insert( p_page_id IN INTEGER, p_page_type IN VARCHAR2, p_page_dcpn IN VARCHAR2) RETURN INTEGER IS TABLE_DOES_NOT_EXIST exception; PRAGMA EXCEPTION_INIT(TABLE_DOES_NOT_EXIST, -942); -- ORA-00942 BEGIN INSERT INTO B2BOWNER.SSC_Page_Map VALUES( p_page_id, p_page_type, p_page_dcpn);

El error

Errors for FUNCTION F_SSC_PAGE_MAP_INSERT LINE/COL ERROR -------- ----------------------------------------------------------------- 17/18 PL/SQL: ORA-00942: table or view does not exist 16/5 PL/SQL: SQL Statement ignored

Las tablas se han verificado dentro del esquema correcto y con los nombres y tipos de atributos correctos

EDITAR: He ejecutado el siguiente comando para comprobar si tengo acceso

DECLARE count_this INTEGER; BEGIN select count(*) into count_this from all_tables where owner = ''B2BOWNER'' and table_name = ''SSC_PAGE_MAP''; DBMS_OUTPUT.PUT_LINE(count_this); END;

La salida que recibí es

1 PL/SQL procedure successfully completed.

Tengo acceso a la mesa.

EDITAR:

Así que finalmente realicé una inserción en la tabla a través del esquema usando PL / SQL y funcionó bien. Parece que simplemente no tengo autoridad para crear funciones, pero eso es una suposición.

EDITAR:

Tabla DDL declaración real

v_create := ''CREATE TABLE '' || TABLE_NAME || '' ( PAGE_ID_NBR NUMERIC(10) NOT NULL Check(Page_ID_NBR > 0), PAGE_TYPE VARCHAR2(50) NOT NULL, PAGE_DCPN VARCHAR2(100) NOT NULL, PRIMARY KEY(Page_ID_NBR, Page_Type))''; EXECUTE IMMEDIATE v_create; COMMIT WORK; COMMIT COMMENT ''Create Table'';


El nombre del procedimiento debe estar en mayúsculas mientras se crea el procedimiento en la base de datos. Puede usar letras pequeñas para el nombre de su procedimiento mientras llama desde una clase Java como:

String getDBUSERByUserIdSql = "{call getDBUSERByUserId(?,?,?,?)}";

En la base de datos el nombre del procedimiento debe ser:

GETDBUSERBYUSERID -- (all letters in caps only)

Esto sirve como una de las soluciones para este problema.


usted debe dar permiso en su db

grant execute on (packageName or tableName) to user;