2014-11-19 8 views
0

я выполнил следующее:PL/SQL не может выполнить хранимую процедуру

CREATE OR REPLACE PROCEDURE DISCOUNT 
    (PHAR IN VARCHAR2, 
    TRADE IN VARCHAR2, 
    EFFECT IN VARCHAR2, 
    FORMULAE IN VARCHAR2, 
    PRICE IN NUMBER, 
    DISCOUNT IN NUMBER) IS 
DECLARE 
    PHAR VARCHAR2(30), TRADE VARCHAR(30), EFFECT VARCHAR(250), FORMULAE VARCHAR2(50), 
    PRICE NUMBER(7,2); 
BEGIN 
    SELECT TRADE IN TRADENAME WHERE PHARNAME = PHAR AND LISTPRICE = PRICE; 
END DISCOUNT; 

нормально и после нажатия "Enter", я набрал это

EXECUTE DISCOUNT; 

и это то, что я получаю:

2 
3 
4 

Это ошибка ??

В случае это необходимо, здесь структура СКИДКА рассказ:

PHARNAME    NOT NULL VARCHAR2(30) 
TRADENAME    NOT NULL VARCHAR2(30) 
SIDEEFFECT      VARCHAR2(250) 
FORMULA       VARCHAR(50) 
LISTPRICE       NUMBER(7,2) 
+1

Во-первых, вы не указали, какую базу данных вы используете. Я предполагаю Oracle. Во-вторых, вы не указали, какой клиент используете. Я предполагаю SQL-Plus, исходя из вывода номеров строк. Ваша проблема заключается в том, что ваша процедура не является синтаксически правильной (вы не можете разделять объявления переменных запятыми, а ваш запрос недействителен SQL и не выбирает INTO), и вы не заканчиваете свою процедуру с помощью '/', что означает, что SQL * Plus все еще ждет вас, чтобы закончить его. Кроме того, неясно, чего вы ожидаете от этой процедуры. –

+0

@JeffreyKemp Я использую команду Oracle Database 11g client & SQL * Plus. – Preeyah

+0

Хорошо, это хороший старт. Мы определили вашу платформу и клиент. Как насчет остальных деталей? Что вы пытаетесь выполнить с помощью этого кода? –

ответ

1

Я понял, что те

2 
3 
4 

после линий EXECUTE DISCOUNT

они командные строки , я должен набирать одну строку за раз для хранимой процедуры

SQL> BEGIN DBMS_OUTPUT.PUT_LINE('Hello!'); 
2 END; 
3/