如何在Oracle中选择varray

时间:2018-05-29 11:22:07

标签: sql oracle plsql

我试图在数组中保存一组ID:

create or replace type vrray_4 as varray(4) of varchar2(10);

create or replace procedure get_acl_owner_exchange (id in varchar2 ) is 
   path_count int;
   acl_type out vrray_4;
begin
   select owner_id into acl_type from kmc_acl_perm
   where  permission_name = 'read.'
   or     permission_name = 'write.'
   or     permission_name = 'delete.';
end get_acl_owner_exchange;

我收到错误:

LINE/COL ERROR
-------- --------------------------------------------------------------------------------
3/17     PLS-00103: Encountered the symbol "VRRAY_4" when expecting one of the following:
         := . ( @ % ; not null range default character
         The symbol ":=" was substituted for "VRRAY_4" to continue.

2 个答案:

答案 0 :(得分:1)

您的{ "date": [ [ "180528" ] ], "BASE10NUM": [ [ "180528" ] ], "time": [ [ "8:46:26" ] ], "HOUR": [ [ "8" ] ], "MINUTE": [ [ "46" ] ], "SECOND": [ [ "26" ] ], "pid": [ [ "2" ] ], "message": [ [ "Query SELECT 1" ] ] } 参数位置错误,需要使用OUT而非BULK COLLECT INTO

SQL Fiddle

Oracle 11g R2架构设置

INTO

答案 1 :(得分:0)

这适合你吗?

CREATE OR REPLACE TYPE vrray_4 AS VARRAY(4) OF VARCHAR2(10);
/

CREATE TABLE kmc_acl_perm (
  owner_id VARCHAR2(10),
  permission_name VARCHAR2(10)
);

CREATE OR REPLACE PROCEDURE get_acl_owner_exchange (id IN VARCHAR2) IS 
  path_count NUMBER;
  acl_type vrray_4;
BEGIN
  SELECT owner_id BULK COLLECT INTO acl_type
    FROM kmc_acl_perm
   WHERE permission_name IN ('read.', 'write.', 'delete.');
END get_acl_owner_exchange;
/