請各路高人指點一二啊:
來個例子:
前提: TableA 內有學號,班級,姓名三個欄位
現在需要通過傳入的“學號”查詢這些學號是否屬於同一個“班級”,可能傳入的“學號”數量不定,可能是3個,也可能是5個; 所以我想講傳入的“學號”先行加工成可直接使用的狀態,可以不用截取就直接拿來查詢,如:'ID1','ID2','ID3','ID4' 作為EMP varchar2 傳入procedure:
CREATE OR REPLACE PROCEDURE TEST_TEST_TEST(EMP IN VARCHAR2,COMMAND1 OUT VARCHAR2)AS
S_CLASS VARCHAR2(25);
Procedure內進行查詢:
SELECT DISTINCT 班級 INTO S_CLASS
FROM TableA
WHERE 學號 IN (EMP);
--------------------------
這裡就出錯了,我看了應該是將我的整個EMP作爲了一個“學號”來查詢了; 請問大家有沒有什麽辦法直接使用我想的這樣的加工過的多個“學號”在一個SQL語句里進行查詢么?需要各位的幫助,感謝大家的幫忙!!!
來個例子:
前提: TableA 內有學號,班級,姓名三個欄位
現在需要通過傳入的“學號”查詢這些學號是否屬於同一個“班級”,可能傳入的“學號”數量不定,可能是3個,也可能是5個; 所以我想講傳入的“學號”先行加工成可直接使用的狀態,可以不用截取就直接拿來查詢,如:'ID1','ID2','ID3','ID4' 作為EMP varchar2 傳入procedure:
CREATE OR REPLACE PROCEDURE TEST_TEST_TEST(EMP IN VARCHAR2,COMMAND1 OUT VARCHAR2)AS
S_CLASS VARCHAR2(25);
Procedure內進行查詢:
SELECT DISTINCT 班級 INTO S_CLASS
FROM TableA
WHERE 學號 IN (EMP);
--------------------------
這裡就出錯了,我看了應該是將我的整個EMP作爲了一個“學號”來查詢了; 請問大家有沒有什麽辦法直接使用我想的這樣的加工過的多個“學號”在一個SQL語句里進行查詢么?需要各位的幫助,感謝大家的幫忙!!!
解决方案 »
- oracle 日期比较 结果转换成小时
- java生成触发器问题
- where子句的问题
- 在tru64 unix 下安装oracle8.1.5时出现提示 请高手进来看一看。在线等!!!!
- exp备份多表的一个问题
- oracle错误12560,服务下面重启Listener失败,求原因!
- 郁闷,用户口令闹不清楚?参与着给分
- 新手提问:oracle9iAS与Oracle9i有什么区别?
- oracle9i中不能显示汉字是什么问题???
- 请大家都来谈谈MySQL、Oracle、SQLServer、DB2的性能,做一下比价
- 用wm_concat合并字段,不想group by所有字段怎么办?
- 请教:如何添加数据
你可以传'ID1,ID2,ID3,ID4' 进来用 in (select regexp_substr('ID1,ID2,ID3,ID4','[^,]+',1,level) from dual connect by level<=4)
来处理
FROM TableA
WHERE str || ' and 1' != '1'
這個方法有效哦!改成直接傳入字符串(ID1,ID2,ID3,ID4)。
但是恕我愚昧,level後面的比較值定一個很大的數有關係么?比如300?因為我不能確定傳入的學號數量可能是多少,有可能幾十個,甚至上百...
把你的procedure的参数设置成type变量
create or replace function f_str2tab(in_str varchar2)return var_array
as
v_str varchar2(32767):= in_str||',';
v_result var_array := var_array();
i number;
begin
loop
exit when v_str is null;
i:= instr(v_str,',');
v_result.extend;
v_result(v_result.count):=trim(substr(v_str,1,i-1));
v_str := substr(v_str,i+1);
end loop;
return v_result;
end;select * from table(f_str2tab('1,2,3'));
COLUMN_VALUE
--------------------------------------------------
1
2
3过程里这么写
SELECT DISTINCT 班級 INTO S_CLASS
FROM TableA
WHERE 學號 IN (select * from table(f_str2tab(EMP)));