Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 在PL/SQL中,如何使用同义词名称初始化表类型的值_Oracle_Plsql_Compiler Errors_Variable Assignment - Fatal编程技术网

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;
/