1つの変数は、where条件のクエリーsqlとして複数の値を格納します.
1965 ワード
Oracle:
このような状況に遭遇したことがあるかもしれません:select*fromテーブルA where name in(****)は、in文の中で変数を使いたいと思っていますが、この変数にはin('李
四',‘張三’),この時は絶対に書いてはいけません
このとき必ず出力するのは0です.oracleはあなたの「a,b」を1つの値に解析するので、記録が調べられないに違いありません.このときは動的sqlを使います.以下に提供します.
よく使われる書き方:
この書き方は必ずintoを外に書いて、少し変に見えますが
次の書き方では効果は得られません.バインド変数でもデフォルトでは1つの変数であり、1つの変数で複数の変数値を格納する効果は得られません.
----------------------本文はluckman 100のCSDNブログから来て、全文の住所はクリックしてください:https://blog.csdn.net/luckyman100/article/details/17735759?utm_source=copy
このような状況に遭遇したことがあるかもしれません:select*fromテーブルA where name in(****)は、in文の中で変数を使いたいと思っていますが、この変数にはin('李
四',‘張三’),この時は絶対に書いてはいけません
DECLARE
v1 VARCHAR2(100):='a,b';
num1 NUMBER;
BEGIN
SELECT COUNT(1) INTO num1 FROM a WHERE m_name IN (v1);
dbms_output.put_line(num1);
END;
このとき必ず出力するのは0です.oracleはあなたの「a,b」を1つの値に解析するので、記録が調べられないに違いありません.このときは動的sqlを使います.以下に提供します.
よく使われる書き方:
この書き方は必ずintoを外に書いて、少し変に見えますが
DECLARE
v1 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;
次の書き方では効果は得られません.バインド変数でもデフォルトでは1つの変数であり、1つの変数で複数の変数値を格納する効果は得られません.
DECLARE
v1 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;
----------------------本文はluckman 100のCSDNブログから来て、全文の住所はクリックしてください:https://blog.csdn.net/luckyman100/article/details/17735759?utm_source=copy