在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类型的值的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL学习

如何修复参数名称不匹配的问题 - DOJO 和 PL/SQL

使用自定义类型调试 pl/sql 函数

创建在循环内输出不同名称的 Oracle PL/SQL 过程

如何修改我的 PL/SQL 过程以进行异常处理?

如何在 PL/SQL 中使用循环多次运行相同的查询?