2013-11-12 2 views
0

Когда я выполнить процедуру энный появится, за исключением следующего сообщения и не показывая никаких выходных данных, которые не должны быть так: анонимный блок завершенPL/SQL анонимный блок завершен без результата отображается

Я пытался set serveroutput on size 50000 но ничего не меняется.

Вот моя процедура PL/SQL не уверена, что я делаю это правильно.

CREATE OR REPLACE PROCEDURE verify AS 
    empnum NUMBER; 
    empname VARCHAR2(50); 
    fail EXCEPTION; 
BEGIN 

    SELECT employee.e#, employee.name INTO empnum, empname 
    FROM employee 
    JOIN driver ON driver.e# = employee.e# 
    JOIN mechanic ON mechanic.e# = driver.e# 
    WHERE rownum = 1; 

EXCEPTION 
    WHEN no_data_found THEN 
    dbms_output.put_line('ok'); 
    RAISE fail; 
END verify; 
/

Я пытаюсь добиться следующего результата при помощи SQL Statement:

SELECT employee.e#, employee.name 
    FROM employee 
    JOIN driver ON driver.e# = employee.e# 
    JOIN mechanic ON mechanic.e# = driver.e# 
    WHERE rownum = 1; 

Так что если есть какие-либо аналогичные записи он будет показывать имя сотрудника и Num. Если подобных записей не обнаружено, появится сообщение ok.

+2

Какой результат вы ожидаете? Предполагая, что во всех трех таблицах есть данные и правильные отношения соединения, ваш запрос будет заполнять две локальные переменные произвольными 'e #' и 'name'. Затем вы ничего не делаете с этими двумя локальными переменными. Я также не уверен, какую выгоду вы получите от объявления здесь исключения «fail». –

+0

@JustinCave привет, спасибо за быстрый ответ .. я обновил свой вопрос о том, чего бы я хотел достичь, но я не уверен, что это сработает. – user2975932

+0

Является ли цель отображать несколько строк в результате? Или вы просто хотите отобразить одну произвольную строку? Последнее не имеет для меня большого смысла, но это то, что подразумевает ваше предложение 'rownum = 1'. Вы просто изучаете PL/SQL из книги (в этом случае запись данных в 'dbms_output' может быть разумной)? Или вы пытаетесь использовать PL/SQL в реальном мире (в этом случае в зависимости от 'dbms_output' является ошибкой)? –

ответ

0

добавить dbms_out_put.put_line (empnum || empname); до ИСКЛЮЧЕНИЯ. попробуйте/

0

Вы просто выбираете значения столбцов в переменных и не отображаете их. Используйте DBMS_OUTPUT.put_line('Empnum: '|| empnum||' Empname: '||empname); сразу после оператора Select.

0

Можете выложить переменную FAIL, которую вы использовали для Raise Exception. Мы можем сделать это, не используя эту переменную. Это является эталонной процедурой. PLZ попробуйте и сообщите нам, если это сработает. спасибо

CREATE or REPLACE PROCEDURE av_sp_test(salary_var_1 in number) 
AS 
name_var avrajit.name%type; 
salary_var avrajit.salary%type; 
fail exception; 
BEGIN 
SELECT name,salary into name_var,salary_var from avrajit 
WHERE salary=salary_var_1; 
dbms_output.put_line('name is'||' '||name_var||' '||'salary is'||' '||salary_var); 
EXCEPTION WHEN no_data_found THEN 
dbms_output.put_line('OK'); 
END av_sp_test; 

-------------------------------------------------- 

I have taken an input variable just to show diffrenet criterias. 

begin 
av_sp_test(1000); 
end; 
--------------------------------------------------- 
name is Sushil salary is 1000 

Statement processed. 

0.01 seconds 
--------------------------------------------------- 

begin 
av_sp_test(2000); 
end; 
--------------------------------------------------- 
OK 

Statement processed. 

0.00 seconds 
Смежные вопросы