有没有办法在SELECT语句中将本地表类型用于IN子句而不指定表类型的索引?
module Sequel
module JDBC
module Oracle
module DatabaseMethods
def schema_column_type(db_type)
end
end
end
end
end
执行返回' PLS-00382:表达式类型错误'
答案 0 :(得分:0)
不,SQL表达式只能引用在SQL作用域中生成的类型(不是PL / SQL作用域 - 即不在包或PL / SQL块中)。
你想要的是:
CREATE TYPE number_list IS TABLE OF NUMBER;
/
DECLARE
temp_tab number_list;
BEGIN
temp_tab := number_list( 1 );
FOR temp_rec IN (SELECT * FROM example_table WHERE id MEMBER OF temp_tab)
LOOP
NULL;
END LOOP;
END;
/
答案 1 :(得分:0)
只要在包规范中定义了PL / SQL类型,就可以在Oracle 12c中执行此操作。这是一个例子:
CREATE OR REPLACE PACKAGE matt_p1 AS
TYPE temp_rec_type IS RECORD (n_temp_id NUMBER);
TYPE temp_tab_type IS TABLE OF temp_rec_type
INDEX BY PLS_INTEGER;
END matt_p1;
/
DECLARE
temp_tab matt_p1.temp_tab_type;
n_temp_id2 NUMBER;
BEGIN
SELECT object_id
BULK COLLECT INTO temp_tab
FROM dba_objects
WHERE OBJECT_NAME LIKE 'DBA_TAB%';
FOR temp_rec IN (SELECT object_name
FROM dba_objects
WHERE object_id IN ( SELECT n_temp_id FROM TABLE(temp_tab))) LOOP
dbms_output.put_line(temp_rec.object_name);
END LOOP;
END;