当我尝试在查询中引用plsql表记录时,出现pls-201错误。
这里是问题的示例:
DECLARE
TYPE trxtypeinforec IS RECORD(
NAME ra_cust_trx_types.NAME%TYPE
);
TYPE trxtypeinfotab IS TABLE OF trxtypeinforec
INDEX BY PLS_INTEGER;
g_inv_type trxtypeinfotab;
l_result VARCHAR2 (100);
BEGIN
g_inv_type(1).NAME := 'Test';
SELECT g_inv_type(qry.ID).NAME
INTO l_result
FROM (SELECT 1 ID
FROM dual) qry;
END;
错误报告-ORA-06550:第15行,第23列:PLS-00201:标识符必须将“ QRY.ID”声明为ORA-06550:第15行,第23列:PLS-00201:标识符'QRY.ID'必须声明为ORA-06550:第15行,第12列:PL / SQL:ORA-00904::无效的标识符ORA-06550:第15行,第5列:PL / SQL:忽略了SQL语句06550。00000-“%s行,%s列:\ n%s”*原因:通常是PL / SQL编译错误。*操作:
首先从SELECT
中检索索引到局部变量,然后将关联数组中的值分配给PL / SQL范围而不是SQL范围中的l_result
:
DECLARE
TYPE trxtypeinforec IS RECORD(
NAME ra_cust_trx_types.NAME%TYPE
);
TYPE trxtypeinfotab IS TABLE OF trxtypeinforec INDEX BY PLS_INTEGER;
g_inv_type trxtypeinfotab;
idx PLS_INTEGER;
l_result ra_cust_trx_types.NAME%TYPE;
BEGIN
g_inv_type(1).NAME := 'Test';
SELECT 1
INTO idx
FROM DUAL;
l_result := g_inv_type(idx).NAME;
DBMS_OUTPUT.PUT_LINE( l_result );
END;
/
输出:
测试
db <>小提琴here
请尝试使用光标。
SET SERVEROUTPUT ON;
DECLARE
TYPE trxtypeinforec IS RECORD(
NAME ra_cust_trx_types.NAME%TYPE
);
TYPE trxtypeinfotab IS TABLE OF trxtypeinforec
INDEX BY PLS_INTEGER;
g_inv_type trxtypeinfotab;
l_result VARCHAR2 (100);
-- Query for retrieving index goes in the cursor or use existing cursor
CURSOR cur_id IS
SELECT 1 AS ID FROM DUAL;
BEGIN
-- Populate records here or put inside loop as required
g_inv_type(1).NAME := 'Test';
-- Loop through the cursor to get the relevant index
FOR rec in cur_id
LOOP
SELECT g_inv_type(rec.ID).NAME
INTO l_result
FROM DUAL;
dbms_output.put_line (l_result);
END LOOP;
END;
/
如果我们可以获取有关现有游标如何获取索引值的更多信息,将很有帮助。
输出:
测试
PL / SQL过程成功完成。