2014-08-18 3 views
0

Я используюPLSQL: Объявить не работает

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production 
PL/SQL Release 11.2.0.3.0 - Production 
CORE 11.2.0.3.0 Production 
TNS for Linux: Version 11.2.0.3.0 - Production 
NLSRTL Version 11.2.0.3.0 - Production 

Я хочу объявить переменную для того, чтобы использовать его в дальнейшем. Это то, что я сделал:

DECLARE 
    price myBeer VARCHAR(20);; 

Это приводит к ошибке:

[DECLARE - 0 row(s), 0.000 secs] [Error Code: 6550, SQL State: 65000] ORA-06550: Row 2, Column 22: 
PLS-00103: found symbol "end-of-file" while expecting one of the following: := ; not null default character 

Это заставило меня сделать следующее:

DECLARE 
myBeer VARCHAR(20) :=2; 

Но это также приводит к ошибке:

[DECLARE - 0 row(s), 0.000 secs] [Error Code: 6550, SQL State: 65000] ORA-06550: Row 2, Column 26: 
PLS-00103: found symbol "end-of-file" while expecting one of the following: * & = - + ; </> at in is mod remainder not rem 
<an exponent (**)> <> or != or ~= >= <= <> and or like like2 like4 likec between || multiset member submultiset 

Может ли это быть так, что h ARD?

+3

это все, что ваш код? –

+5

'DECLARE price myBeer VARCHAR (20) ;;' не является допустимым блоком PL/SQL. Пожалуйста, прочтите руководство по PL/SQL –

+1

Что вы хотите достичь? –

ответ

4

Вы должны собрать весь блок сразу и переменная будет действовать только в сфере применения BEGIN ... END блока:

DECLARE 
    myVariableName VARCHAR2(4000); 
BEGIN 
    myVariableName := 'TEST'; 
    DBMS_OUTPUT.PUT_LINE('Value of var = ' || myVariableName); -- This works! 
END; 
/

-- This will not work, since it is outside of the Block! 
SELECT myVariableName FROM DUAL; 
+0

[DECLARE - 0 строк, 0.000 секунд] [Код ошибки: 6550, состояние SQL: 65000] ORA-06550: строка 2, столбец 32: PLS-00103: найден символ «конец файла», ожидая одно из следующего: : =; а не нулевой символ по умолчанию [BEGIN - 0 строк, 0.000 секунд] [Код ошибки: 6550, состояние SQL: 65000] ORA-06550: строка 2, столбец 26: PLS-00103: найден символ «конец- файл ", ожидая одно из следующего: * & = - +; at in is mod осталось не rem <показатель (**)><> or! = Или ~ => = <= <> и/или как нравится2 like4 likec между || multiset member submultiset – Chris311

+0

[DBMS_OUTPUT.PUT_LINE (- 0 строк, 0.000 секунд] [Код ошибки: 900, состояние SQL: 42000] ORA-00900: недопустимое SQL-присвоение [END - 0 строк, 0.000 секунд] [Код ошибки: 900, состояние SQL: 42000] ORA-00900: недопустимое присвоение SQL [/ - 0 строк, 0.000 секунд] [Код ошибки: 17439, состояние SQL: 99999] недопустимый тип SQL – Chris311

+1

Если вы внимательно прочитайте свое первое сообщение об ошибке: «КОНЕЦ ФАЙЛА, найденного в ROW2, столбец 32». Это означает, что вы пытались выполнить только первые две строки и ничего больше!Если вы используете SQL-Developer или Toad, возможно, у вас были отмечены первые две строки, а не весь блок? Попробуйте выполнить File вместо выполнения кода. – Falco

1

Следующий код работает для меня хорошо:

DECLARE 
    price VARCHAR(20); 
begin 
    null; 
end; 

Похоже, что ваш код не синтаксически правильно.

EDIT - я разместил этот код только для его компиляции.

+0

[DECLARE - 0 строк, 0.000 секунд] [Код ошибки: 6550, состояние SQL: 65000] ORA-06550: строка 2, столбец 20: PLS-00103: найден символ «конец файла», ожидая одно из следующего: : =; не нулевой символ по умолчанию [BEGIN - 0 строк, 0.000 секунд] [Код ошибки: 6550, состояние SQL: 65000] ORA-06550: строка 2, столбец 8: PLS-00103: найден символ «конец- файл ", ожидая одно из следующего: ; 10:33:24 [END - 0 строк, 0.000 секунд] [Код ошибки: 900, состояние SQL: 42000] ORA-00900: недопустимое назначение SQL – Chris311