Общие правила

Обработка SQL-операторов с параметрами выполняется по следующим правилам:

  1. допустимыми являются как именованные параметры (:< имя параметра >), так и неименованные (?), например:

    select make from auto where year=:year;
    select make from auto where year >?;
  2. SQL-оператор может включать одновременно именованные и неименованные параметры, например:

    select make from auto where year between :beg_year and :end_year and color=?;
  3. подсчет параметров ведется слева направо по тексту SQL-оператора, например:

    select make from auto where year in (?,:year,?);

    Порядок подсчета параметров SQL-оператора приведен на рисунке 1.

    Порядок подсчета параметров SQL-оператора
    Рисунок 1. Порядок подсчета параметров SQL-оператора

  4. общее количество уникальных именованных параметров в одном SQL-операторе – не больше 255;

  5. длина значения вводимого параметра не должна превышать 4 Кбайт;

  6. максимальная суммарная длина значений всех параметров – 16 Кбайт;

  7. при обработке SQL-оператора c параметрами inl запрашивает ввод значения для каждого параметра. При этом для именованных параметров в качестве подсказки выдается имя и в скобках тип и, если необходимо, длина параметра, а для неименованных – порядковый номер и тип, например:

    SQL >SELECT count(model) FROM AUTO WHERE COLOR=?
    1 >AND YEAR = :YEAR;
    Параметр 1 (CHAR(10)) >YELLOW
    YEAR (INTEGER) >71
    |            38|
    INL : выдано строк   :1
    SQL >select distinct make,year  from auto
    1 >where ?(char(4))= make;
    SQL >insert into auto( personid,make,year,model) values
    1 >(?,:make,:year,:model);
    SQL >delete from auto where year< = ?;
  8. если в SQL-операторе есть несколько одноименных именованных параметров, то запрос на ввод значения для данного именованного параметра выполняется один раз, например:

    SQL >select count(model) from auto where weight between 1 >:base_weight-500 and :base_weight+500;
    BASE_WEIGHT (INTEGER) >1000
    |          19|
    SQL >exec
    BASE_WEIGHT (INTEGER) >1500
    |           54|
    SQL >
  9. присвоение параметру NULL-значения выполняется с помощью ввода строки NULL (все заглавные буквы). Для присвоения символьным строкам значения 'NULL' необходимо использовать отличную от строки NULL транслитерацию, например, null, Null;

    SQL >update auto set color=? where personid=:person;
    Параметр1 (CHAR(10)) >NULL
    PERSON (INTEGER) >34
    SQL >exec
    Параметр1 (CHAR(10)) >null
    PERSON (INTEGER) >35
    SQL >select color from auto where personid in (34,35);
    |                 |
    |null             |
  10. для хранимых процедур запрашивается ввод значений для всех типов параметров, однако введенное значение OUT-параметра игнорируется. Список параметров процедуры является позиционным, поэтому, если в списке параметров присутствует параметр типа OUT, то в SQL-операторе с параметрами он должен быть позиционирован либо как необрабатываемый (пропущенный), знаком «запятая» (в конце списка параметры типа OUT можно не задавать), либо как обычный параметр (но запрос на ввод значения такого параметра выдаваться не будет), например:

    Список параметров процедурыSQL-оператор
    с параметрами
    proc1 (in p1 int,out p2 int,inout p3 char(25),in p4 date);execute proc1(?,,?,?);
    execute proc1(?,?,?,?);
    proc2 (out p1 int,out p2 int,inout p3 char(25),in p4 date);execute proc2(,,:p3,?);
    execute proc2(?,?,:p3,?);
    proc3 (inout p1 int,in p2 int,out p3 char(25),out p4 date);execute proc3(:p1,:p2);
  11. нельзя использовать параметры для столбцов типа BLOB и EXTFILE;

  12. если SQL-оператор с параметрами представлен в виде SQL-скрипта, то значения параметров должны задаваться в этом же скрипте сразу после текста SQL-оператора, каждое значение на отдельной строке. Для именованных повторяющихся параметров значение должно задаваться один раз, например:

    Текст SQL-скрипта:

    SELECT model, "Подзапрос5".name
    FROM AUTO,
    (SELECT name, personid FROM person where sex=?) as "Подзапрос5"
    where color=? and year=?
    and auto.personid="Подзапрос5".personid;
    M
    YELLOW
    70
  13. значения булевских параметров можно вводить в верхнем регистре (TRUE, T, FALSE, F) и в нижнем (true, t, false, f);

  14. в случае если SQL-транслятор не может самостоятельно определить тип параметра из контекста SQL-запроса, пользователь должен явно указывать типы параметров.

    Правильные конструкции:
    select concat (? (char(10)), ? (char(5)), :param (char(10)));
    
    select ? (char(10)) + ? (char(5))|| :param (char(10));
    
    Ошибочная конструкция:
    select concat (?, :param);