[ОТВЕТИТЬ]
Опции темы
22.04.2015 17:28  
BotMan
написал скрипт script.sql
Код:
declare 
i varchar2(20) := '000333';
begin

SELECT * FROM table WHERE id = :i;

end;
/
запускаю его через батник sqlplus user/pwd@base @script.sql > log.txt

он шайтан пишет
Код:
переменная привязки I не описана

подскажите плз как ее описать?
 
22.04.2015 17:45  
KirillHome
Не знаю, в тему или нет, но

Цитата:
Возможно многие знают (я даже в этом не сомневаюсь), но может и нет про одну особенность символьного/строчного типа данных в СУБД Oracle именуемым VARCHAR2.
Сначала приведу такой код:

Код:
DECLARE 
   t_string varchar2(10);
Данный кусок кода говорит нам — мы объявили переменную с типом varchar2. А вот цифра «10» что будет значить? Она не будет значить, что в переменную можно вписать 10 символов. И вот почему.

В символьные/строчные типы данных Oracle можно уместить все, начиная с состоящего из одного символа значения и заканчивая очень большой строкой, которая может иметь размер до 32 кб. В этих типах можно хранить цифры, буквы, двоичные данные и любые другие символы, которая поддерживает СУБД Oracle.

Типы символ/строка определяют свою разрядность (или длину) с помощью целого числа. Поэтому указанное нами число «10» фактически определяет допустимое количество байтов, а не количество символов, которое мы можем записать в переменную. Т.е. мы не поместим в переменную с разрядностью 2 простой 3-х байтовый символ.

Поэтому наш код означает, что в переменную «t_string» можно передать до 10 байтов данных. Чтобы нам можно было передать любое количество символов независимо от количества байтов на один символ , нужно переписать наш код следующим образом:

Код:
DECLARE 
   t_string varchar2(10 CHAR);
Собственно всё, что я хотел рассказать
 
22.04.2015 17:57  
BotMan
познавательно, но не то ... значение не передается в запрос... 8(
 
22.04.2015 17:59  
OlegON
если тебе надо ту, что описал передать в select, то : не нужно.
SQL код:
SELECT FROM table WHERE id i
 
22.04.2015 20:08  
BotMan
получилось вот так:
Код:
declare 
i varchar2(20) := '000333';
B varchar2(20);  (можно B table.name%type; где table - таблица, name - ее колонка)
begin

SELECT  name  into   B    FROM table WHERE id = i;

dbms_output.put_line(B);  -- отобразить содержимое переменной (name)


end;
/
 
 
Опции темы



Часовой пояс GMT +3, время: 01:01.

Все в прочитанное - Календарь - RSS - - Карта - Вверх 👫 Яндекс.Метрика
Форум сделан на основе vBulletin®
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.