2016-12-09 19 views
0
create or replace procedure para_cursor_exe as 
cursor c_p_det(tar_val number) is select name, salary from fees where salary < tar_val; 
nname varchar2(30); 
ssalary number(5); 

begin 
<<block_exe>> 
begin 
Open c_p_det(&tar_val); 
LOOP 
FETCH c_p_det into nname, ssalary; 
DBMS_OUTPUT.PUT_LINE('NAME : ' || NNAME || ' :::: SALARY : ' || SSALARY); 
EXIT WHEN C_P_DET%NOTFOUND; 
END LOOP; 
CLOSE C_P_DET; 
end; 

execute immediate ' block_exe ' ; 
dbms_output.put_line('done processing !!'); 

end; 
/ 

SQL> @para_cursor_exe.sql; 
Enter value for tar_val: 1000 
old 9: Open c_p_det(&tar_val); 
new 9: Open c_p_det(1000); 

Procedure created. 

を実行していないが、手順作成が、手順がコンパイルされる

SQL> call para_cursor_exe; 
call para_cursor_exe 
* 
ERROR at line 1: 
ORA-06576: not a valid function or procedure name 

iがでカーソルに渡されることになっている異なる目標値に対して動的に処理手順をたい次のように呼び出しでエラーを返しますランタイム。どのように私はそれを呼び出すか、またはロジックが間違っていますか?

+0

コールを使用していないあなたが取得する提案を無視しないでくださいSQLタグを使用するときに特定のDBMSタグを追加します。構文と機能性が非常に異なるため、使用しているデータベースが分かっていることが必要です。 –

+0

@Ken White ..私はoracleを使用しており、コマンドプロンプトから実行しています。 – codepoetly

+1

はい、わかっています。私はあなたのためにOracleタグを追加しました。追加する必要があると表示された赤いボックスを無視するのではなく、質問するときにその指示を求められたら、自分で追加する必要があります。 –

答えて

1

という呼び出しは、有効な関数またはプロシージャ名ではありません。

create or replace procedure p as begin null; end; 
/

使用カッココールから()

call p(); 

または全て

begin 
    p; 
end; 
+0

は、ここで尋ねる前に両方のオプションを試してみましたが、もう一度試しましたが、失敗しません。新しいエラー '無効なSQL文'が表示されます – codepoetly

+0

これはおそらくあなたのコードが無効なためです。 'select * from all_errors; ' –

+0

コードが無効である場合、どのようにコンパイルするのですか? n私はそれを働かせるために何をすべきですか? – codepoetly