データ列情報を 2 つのバインド変数に割り当てるこのスクリプトを読みました。
このようなもの:
EXEC SQL SELECT
var1
into :v.v1:v2
from table
そこにコンマがあってはいけませんか?それとも、同じ値を使用してに代入var1
するようなものですか?v.v1
v2
データ列情報を 2 つのバインド変数に割り当てるこのスクリプトを読みました。
このようなもの:
EXEC SQL SELECT
var1
into :v.v1:v2
from table
そこにコンマがあってはいけませんか?それとも、同じ値を使用してに代入var1
するようなものですか?v.v1
v2
上記のスクリプトはエラーのみを返します。値を割り当てる場合は、カンマが必要です。
構文は次のようになります:- EMPLOYEES から Empno、Ename、Deptno、salary をフェッチする場合の例。plsql ブロックは以下のようになります。
DECLARE
L_EMPNO NUMBER;
L_ENAME VARCHAR2(1000);
L_DEPTNO NUMBER;
L_SALARY NUMBER;
BEGIN
SELECT EMPNO, ENAME, DEPTNO, SALARY
INTO L_EMPNO, L_ENAME, L_DEPTNO, L_SALARY
FROM EMPLOYEES
WHERE EMPNO=100;
END;
このコードは、SQL が埋め込まれた C プログラムである PRO*C プログラムの一部です。
v2 は指標変数です。情報については、こちらを参照してください: https://docs.oracle.com/cd/B28359_01/appdev.111/b28427/pc_04dat.htm#i12463
インジケータ変数には、関連付けられた変数に関連する値が含まれます。この場合は v.v1 であり、使用される操作の後に設定されます。この場合、選択後に v2 をテストでき、その値に基づいて v.v1 に関する情報が表示されます。
上記のリンクから、v2 が等しい場合:
0 - The operation was successful
-1 - A NULL was returned, inserted, or updated.
-2 - Output to a character host variable from a "long" type was truncated, but the original column length cannot be determined.
>0 - The result of a SELECT or FETCH into a character host variable was truncated. In this case, if the host variable is a multibyte character variable, the indicator value is the original column length in characters. If the host variable is not a multibye character variable, then the indicator length is the original column length in bytes.
別の形式を使用することをお勧めします。これにより、後でこれを維持する人にとって物事が明確になります(少なくとも、その人に好意を示し、頭を悩ませたときにこれにコメントしてください)。あなたの後に保守する人のために常にコードを書いてください。そんなことをする前に、あなたはその人を望んでいませんか?!:
EXEC SQL SELECT
var1
into :v.v1 INDICATOR :v2
from table