在PL/SQL中,如何声明包含多个值的变量MyListOfValues(MyValue1,MyValue2等)
SELECT *
FROM DatabaseTable
WHERE DatabaseTable.Field in MyListOfValues
Run Code Online (Sandbox Code Playgroud)
我正在使用Oracle SQL Developer
像这样创建 SQL 类型:
CREATE TYPE MyListOfValuesType AS TABLE OF VARCHAR2(4000);
Run Code Online (Sandbox Code Playgroud)
然后在SQL语句中使用
DECLARE
MyListOfValues MyListOfValuesType;
BEGIN
MyListOfValues := MyListOfValuesType('MyValue1', 'MyValue2');
FOR rec IN (
SELECT *
FROM DatabaseTable
WHERE DatabaseTable.Field in (
SELECT * FROM TABLE(MyListOfValues)
)
)
LOOP
...
END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)
直到 Oracle 11g,这仅适用于 SQLTABLE类型,不适用于 PL/SQLTABLE类型。在 Oracle 12c 中,您还可以使用 PL/SQL 类型。
使用集合:
CREATE TYPE Varchar2TableType AS TABLE OF VARCHAR2(200);
Run Code Online (Sandbox Code Playgroud)
或使用内置类型SYS.ODCIVARCHAR2LIST或SYS.ODCINUMBERLIST:
VARIABLE cursor REFCURSOR;
DECLARE
your_collection SYS.ODCIVARCHAR2LIST := SYS.ODCIVARCHAR2LIST();
BEGIN
your_collection.EXTEND( 100 );
your_collection( 1) := 'Some value';
your_collection( 2) := 'Some other value';
-- ...
your_collection(100) := DBMS_RANDOM.STRING( 'x', 20 );
OPEN :cursor FOR
SELECT t.*
FROM your_table t
INNER JOIN
TABLE( your_collection ) c
ON t.id = c.COLUMN_VALUE;
END;
/
PRINT cursor;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15569 次 |
| 最近记录: |