oracle编写一个函数,功能为检测一个元素是否在一个集合中

下面是我自己写的,执行不了啊!哪里错了,大神帮忙看看
CREATE OR REPLACE TYPE STR_ARRAY IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;

CREATE OR REPLACE FUNCTION IN_ARRAY(src VARCHAR2, arr STR_ARRAY )
RETURN NUMBER AS
BEGIN
FOR arrStr IN arr LOOP
IF src = arrStr THEN
RETURN 1;
END IF
END LOOP;
RETURN 0;
END;

SELECT IN_ARRAY('02350', ('02350','02380','02349','02281')) FROM dual

你确定能这样用? 我一直都没有这么试过,能成功的话告诉我一下,内存表直接传一个常量值可以吗,我都是在函数外部构建好的,再传入内存表的名称,PL/SQL在字符串处理方面不是那么强,你以为是Java,什么都不要自己写,for in 这个循环在PL/SQL里面貌似没有

DECLARE
  TYPE t_table IS TABLE OF VARCHAR2(3) INDEX BY BINARY_INTEGER;
  v_table t_table; 
  v_cnt   NUMBER;
BEGIN
  v_table(1) := '111';
  v_table(2) := '333';
  v_table(3) := '999';

  v_cnt := v_table.COUNT; -- 获取内存表的实际元素个数
  FOR i IN 1 .. v_cnt LOOP -- 循环获取元素的方式
    dbms_output.put_line(v_table(i));
    END LOOP;
END;

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-12-24
create or replace function isExist(data in DataTypes) --DataTypes 为表中该数据的类型
return Number
is
v_flag number(2);
v_data [DataTypes]; --表中数据的类型
begin
select data into v_data from table_name where ....;
if v_data not null then
v_falg := 1;
else
v_flag :=0;
end if;
return v_falg;
Exception
when DATA_NOT_FOUND then
v_falg :=0;
return v_falg;
when OTHERS then
v_flag := -1;
return v_falg;
end;

--返回0不是该数据不存在
--返回1表示该数据存在
--返回-1表示sql语句有问题
--可能不需要if判断,但为了保险,加了一句,可能是多余的代码。本回答被网友采纳
第2个回答  2016-12-22
调用函数用 call命令
相似回答