SQL Serverではこれを使用できます。
DECLARE @variable INT;
SELECT @variable= mycolumn from myTable;
Oracleでも同じことができますか?私は現在次を試みています:
DECLARE COMPID VARCHAR2(20);
SELECT companyid INTO COMPID from app where appid='90' and rownum=1;
なぜこれがworkingではないのですか?
DECLARE
the_variable NUMBER;
BEGIN
SELECT my_column INTO the_variable FROM my_table;
END;
クエリが単一の行のみを返すことを確認してください。
デフォルトでは、SELECT INTOステートメントは1行のみを返す必要があります。そうでない場合、PL/SQLは事前定義の例外TOO_MANY_ROWSを発生させ、INTO句の変数の値は未定義です。 WHERE句が特定の行のみに一致するように特定されていることを確認してください
行が返されない場合、PL/SQLはNO_DATA_FOUNDを発生させます。実用的な場合は、COUNT(*)やAVG()などの集計関数の結果を選択することで、この例外を防ぐことができます。これらの関数は、条件に一致する行がない場合でも、単一の値を返すことが保証されています。
SELECT ... BULK COLLECT INTOステートメントは、複数の行を返すことができます。結果を保持するには、コレクション変数を設定する必要があります。結果セット全体を保持するために必要に応じて拡張する連想配列またはネストした表を宣言できます。
暗黙カーソルSQLとその属性%NOTFOUND、%FOUND、%ROWCOUNT、および%ISOPENは、SELECT INTOステートメントの実行に関する情報を提供します。
あなたが何を求めているのか完全にはわかりませんが、PL/SQLでは単純に
DECLARE
v_variable INTEGER;
BEGIN
SELECT mycolumn
INTO v_variable
FROM myTable;
END;
Ollie。
追加のポイント:
tsql
からplsql
に変換するときは、no_data_found
例外を心配する必要があります
DECLARE
v_var NUMBER;
BEGIN
SELECT clmn INTO v_var FROM tbl;
Exception when no_data_found then v_var := null; --what ever handle the exception.
END;
tsql
if no data found
の場合、変数はnull
になりますが、exception
はありません
ORA-01422:完全フェッチは、要求された行数より多くを返します
where条件を使用して正確なレコードを指定しない場合、上記の例外が発生します
DECLARE
ID NUMBER;
BEGIN
select eid into id from employee where salary=26500;
DBMS_OUTPUT.PUT_LINE(ID);
END;
単一行の出力をselect intoクエリから変数に保存する場合:
declare v_username varchare(20);ユーザー名を選択して、v_usernameからFROM WHERE WHERE user_id = '7';
これにより、単一レコードの値が変数v_usernameに保存されます。
Select into queryから変数に複数の行の出力を保存する場合:
listagg関数を使用する必要があります。 listaggは、結果の列の列を単一の列に連結し、それらを区別するために、特別なシンボルを使用できます。以下のようにクエリを使用して、グループ内のSELECT listagg(username || '、')(ユーザー名順に)v_username FROM users;