在PL / SQL中如何使用同义词名称初始化Table类型的值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在PL / SQL中如何使用同义词名称初始化Table类型的值相关的知识,希望对你有一定的参考价值。
我想在qazxsw poi函数中初始化qazxsw poi table的列的值。
下面是代码。这个问题可以被视为MY_PERSON_TABLE
的延伸
我面临的问题是,我无法编译代码并为FNAME,ID分配一些值。
FN_INITIALIZE
答案
你有几个错误:
- this question应该是
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
(和CREATE OR REPLACE PACKAGE TEST_BODY
也应该是CREATE OR REPLACE PACKAGE BODY TEST
)。 - 您不需要初始化记录;它们是使用初始化为
END TEST_BODY
的字段自动创建的。这是您需要初始化的对象。 END TEST
没有意义,因为NULL
是表的同义词,而不是记录。相反,你只想选择任何索引值(例如L_TO_INITIALIZE.PERSONAL := NEW SYNONYM_PERSONAL();
),只需设置记录的字段值,而无需初始化它。
像这样:
SYNONYM_PERSONAL
23
但是,你应该问自己:
- 为什么使用PL / SQL关联数组?如果您要使用连续索引,那么您可能应该使用集合。
- 你打算怎么处理阵列?你没有从函数中返回它。
以上是关于在PL / SQL中如何使用同义词名称初始化Table类型的值的主要内容,如果未能解决你的问题,请参考以下文章
如何修复参数名称不匹配的问题 - DOJO 和 PL/SQL