Переменные связывания в PL/SQL
Я прочитал этот скрипт, который присваивает информацию столбца данных в 2 переменных привязки.
что-то вроде этого:
EXEC SQL SELECT
var1
into :v.v1:v2
from table
Там не должно быть запятой? Или это как назначение var1
в v.v1
а также в v2
с одинаковыми значениями?
2 ответа
Этот код представляет собой фрагмент программы PRO*C, программы на C со встроенным SQL.
v2 является индикаторной переменной. Смотрите здесь для получения информации: https://docs.oracle.com/cd/B28359_01/appdev.111/b28427/pc_04dat.htm
Индикаторная переменная будет содержать значение, которое относится к связанной с ней переменной, в данном случае 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
Приведенный выше скрипт выдаст только ошибку. если вы хотите присвоить значение запятая требуется для того же.
Синтаксис будет следующим:- Например, если вы хотите получить Empno,Ename,Deptno,salary из EMPLOYEES. Блок 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;