Oracle 在PL/SQL中,如何使用同义词名称初始化表类型的值
我想初始化Oracle 在PL/SQL中,如何使用同义词名称初始化表类型的值,oracle,plsql,compiler-errors,variable-assignment,Oracle,Plsql,Compiler Errors,Variable Assignment,我想初始化FN\u INITIALIZE函数中MY\u PERSON\u表的列的值 下面是代码。这一问题可被视为是该问题的延伸 我面临的问题是,我无法编译代码并为FNAME,ID分配一些值 create table MY_PERSON_TABLE ( ID NUMBER(20), FNAME VARCHAR2(30) ); CREATE SYNONYM SYNONYM_PERSONAL FOR MY_PERSON_TABLE; CREATE OR REPLACE PACKAGE TEST I
FN\u INITIALIZE
函数中MY\u PERSON\u表的列的值
下面是代码。这一问题可被视为是该问题的延伸
我面临的问题是,我无法编译代码并为FNAME,ID分配一些值
create table MY_PERSON_TABLE
(
ID NUMBER(20),
FNAME VARCHAR2(30)
);
CREATE SYNONYM SYNONYM_PERSONAL FOR MY_PERSON_TABLE;
CREATE OR REPLACE PACKAGE TEST IS
TYPE TY_PERSONAL IS TABLE OF SYNONYM_PERSONAL%ROWTYPE INDEX BY BINARY_INTEGER;
TYPE TY_PERSON IS RECORD(
PERSONAL TY_PERSONAL
);
END TEST;
CREATE OR REPLACE PACKAGE TEST_BODY IS
FUNCTION FN_INITIALIZE(P_ACTION IN VARCHAR2) RETURN BOOLEAN IS
L_TO_INITIALIZE TY_PERSON;
BEGIN
L_TO_INITIALIZE.PERSONAL := NEW SYNONYM_PERSONAL();
--The above code throws "PLS-00222: no function with name .. exists in the scope"
--How to initialiaze the value of FNAME & ID of MY_PERSON_TABLE?
END FN_INITIALIZE;
END TEST_BODY;
BEGIN
您有几个错误:
创建或替换包体测试
应该是创建或替换包体测试
(并且结束测试
也应该是结束测试
)
- 您不需要初始化记录;它们是自动创建的,字段初始化为
NULL
。这是您需要初始化的对象
L_TO_INITIALIZE.PERSONAL:=新同义词_PERSONAL()
没有意义,因为同义词\u PERSONAL
是表的同义词,而不是记录的同义词。相反,您只需要选择任何索引值(23
),只需设置记录的字段值,而无需对其进行初始化
像这样:
但是,你应该问问自己:
- 为什么要使用PL/SQL关联数组?如果要使用连续索引,则可能应该使用集合
- 你打算用这个阵列做什么?您不能从函数返回它
CREATE OR REPLACE PACKAGE BODY TEST IS
FUNCTION FN_INITIALIZE(P_ACTION IN VARCHAR2) RETURN BOOLEAN
IS
L_TO_INITIALIZE TY_PERSON;
BEGIN
L_TO_INITIALIZE.PERSONAL(23).FNAME := 'A';
L_TO_INITIALIZE.PERSONAL(23).ID := 1;
RETURN TRUE;
END FN_INITIALIZE;
END TEST;
/