Данная статья достаточна проста, но она позволяет предостеречь читателей от потерянного времени на поиск ошибки, которая может быть не очевидна.
Допустим была создана макропеременная:
%let id = 1;
Сразу напомню, что макропеременная &id имеет тип char.
Далее мы хотим передать эту переменную в БД Oracle через pass through. В отличии от работы в SAS, кавычки не требуются.
proc sql noprint;
connect to oracle as myora (user=»example» password=»example» path=example);
execute (create table example (id number)) by myora;
execute (insert into example values (&id)) by myora;
disconnect from myora;
quit;
Как мы можем убедиться, происходит неявное преобразование и в табличку записывается числовое значение.
Но допустим, вам надо поместить это значение в какую-то процедуру?
Например, example.test(id as number).
proc sql noprint;
connect to oracle as myora (user=»example» password=»example» path=example);
execute (
begin
example.test(&d);
end;
) by myora;
disconnect from myora;
quit;
И вроде бы всё нормально, но не происходит вызов процедуры, и не происходит ошибка Oracle.
Проблема опять же, на поверхности. В данном случае, требуется явно преобразовать тип данных, чтобы Oracle считал как необходимый нам тип. Делаем это функцией to_number.
proc sql noprint;
connect to oracle as myora (user=»example» password=»example» path=example);
execute (
begin
example.test(to_number(&sess_id));
end;
) by myora;
disconnect from myora;
quit;
Всё! Спасибо за прочтение!
До скорых встреч!