在PL / SQL中如何使用同义词名称初始化Table类型的值

问题描述 投票:-1回答:1

我想在qazxsw poi函数中初始化qazxsw poi table的列的值。

下面是代码。这个问题可以被视为MY_PERSON_TABLE的延伸

我面临的问题是,我无法编译代码并为FNAME,ID分配一些值。

FN_INITIALIZE
oracle plsql compiler-errors variable-assignment
1个回答
2
投票

你有几个错误:

  • 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关联数组?如果您要使用连续索引,那么您可能应该使用集合。
  • 你打算怎么处理阵列?你没有从函数中返回它。
© www.soinside.com 2019 - 2024. All rights reserved.