Передача макропеременных на сторону Oracle

Всем привет!

Данная статья достаточна проста, но она позволяет предостеречь читателей от потерянного времени на поиск ошибки, которая может быть не очевидна.


Допустим была создана макропеременная:
%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;

Всё! Спасибо за прочтение!
До скорых встреч!

Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.