[警告] ORA-24344: 成功, 但出現編譯錯誤
767/69 PLS-00201: 必須宣告識別符號 'RETOBJ20'
765/3 PL/SQL: Item ignored
1258/24 PLS-00201: 必須宣告識別符號 'RETDATA20'
1258/24 PL/SQL: Item ignored
1259/24 PLS-00201: 必須宣告識別符號 'RETOBJ20'
1259/24 PL/SQL: Item ignored
1279/9 PLS-00320: 此運算式的型別宣告不完整或格式不正確
1279/9 PL/SQL: Statement ignored
1280/9 PLS-00320: 此運算式的型別宣告不完整或格式不正確
1280/9 PL/SQL: Statement ignored
1303/11 PLS-00320: 此運算式的型別宣告不完整或格式不正確
1303/11 PL/SQL: Statement ignored
1307/15 PLS-00320: 此運算式的型別宣告不完整或格式不正確
1307/11 PL/SQL: Statement ignored
1323/20 PLS-00320: 此運算式的型別宣告不完整或格式不正確
1323/20 PL/SQL: ORA-00904: "V_LIST": 識別符號無效
1317/7 PL/SQL: SQL Statement ignored
(1: 0): 警告:已編譯但帶有編譯錯誤
這個是需要建立型別嗎?如何建立
create or replace PROCEDURE get_list_test(p_apply_level IN VARCHAR2
,p_level_value IN VARCHAR2
,x_ret_code OUT VARCHAR2
,x_ret_msg OUT VARCHAR2
,x_ret_data OUT SYS_REFCURSOR) IS
rec_profile sys_setting%ROWTYPE;
v_profile_value VARCHAR2(1024);
v_profile_value_id VARCHAR2(32);
v_list retdata20 := NEW retdata20();
v_model retobj20;
v_count NUMBER := 0;
BEGIN
x_ret_code := retsucc;
FOR cur IN (SELECT t.*
FROM sys_setting
WHERE t.apply_level LIKE '%' || p_apply_level || '%'
AND t.state = 'A')
LOOP
v_count := v_count + 1;
BEGIN
SELECT pv.value
,pv.id
INTO v_profile_value
,v_profile_value_id
FROM sys_setting_value pv
WHERE pv.profile_id = cur.id
AND pv.level_value = p_level_value;
v_list.extend();
v_list(v_list.count) := retobj20('PROFILEINFO'
,v_profile_value_id
,cur.profile_code
,p_apply_level
,p_level_value
,v_profile_value
,to_char(NULL)
,to_char(NULL)
,to_char(NULL)
,to_char(NULL)
,to_char(NULL)
,to_char(NULL)
,to_char(NULL)
,to_char(NULL)
,to_char(NULL)
,to_char(NULL)
,to_char(NULL)
,to_char(NULL)
,to_char(NULL)
,to_char(NULL)
,to_char(NULL));
EXCEPTION
WHEN no_data_found THEN
v_model := get_parent_profile_value(cur.profile_code
,p_apply_level
,p_level_value);
IF (v_model.f01 IS NOT NULL)
THEN
v_list.extend();
v_list(v_list.count) := v_model;
END IF;
END;
END LOOP;
v_count := v_count + 1;
OPEN x_ret_data FOR
SELECT res.f01 AS profile_value_id
,res.f02 AS profile_code
,res.f03 AS profile_level_type
,res.f04 AS profile_level_value
,res.f05 AS profile_value
,res.f06 AS profile_level_value_name
FROM TABLE(v_list) res;
END;
uj5u.com熱心網友回復:
1. RETOBJ20和RETDATA20型別沒宣告;
2. retobj20函式沒宣告;
3. 例子的話,那就附上我所著書中的一段例子吧,樓主自己理解:
SQL> set serveroutput on
SQL> create table tmp_stud as select * from t_stud;
SQL> declare
type tp_stud is table of t_stud%rowtype;
tb_stud tp_stud;
begin
delete from tmp_stud returning stud_no,name,age,class_no,teach_no
bulk collect into tb_stud;
for i in tb_stud.first .. tb_stud.last loop
DBMS_OUTPUT.PUT_LINE(tb_stud(i).name);
end loop;
end;
/
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/19576.html
標籤:開發
