一个变量存储多个值的查询sql

来源:互联网 发布:python 数组 clear 编辑:程序博客网 时间:2024/04/29 23:49

你可能遇到过这种情况:select * from 表A where name in (****),在in语句里面你想用个变量,但是这个变量有时候有多个值,如 in(‘李

四’,‘张三’),这个时候你是绝对不能写成

DECLAREv1  VARCHAR2(100):='a,b';num1 NUMBER;BEGINSELECT COUNT(1) INTO num1 FROM a WHERE m_name IN (v1);dbms_output.put_line(num1);END;

这个时候肯定输出的是0,因为oracle会将你‘a,b’解析成一个值,所以肯定是查不到记录的,这个时候就要用上动态sql了,下面提供

种常用的写法:

这种写法一定要把into写在外面,虽然看起来有点怪

DECLAREv1  VARCHAR2(100):='''a'',''b''';num1 NUMBER;BEGIN  execute IMMEDIATE 'select count(1) from a where m_name in ('||v1||')' INTO num1;dbms_output.put_line(num1);END;

下面的写法是不能达到效果的,因为用绑定变量也就默认了是一个变量,不能达到一个变量存储多个变量值的效果

DECLAREv1  VARCHAR2(100):='''a'',''b''';num1 NUMBER;v_sql  VARCHAR2(200);BEGIN  v_sql := 'select count(1)  from a where m_name in (:1)';  execute immediate v_sql INTO num1 USING v1;dbms_output.put_line(num1);END;


0 0
原创粉丝点击