2017-12-19 8 views
0

私はここで新しいルールに従うことができない場合、私から謝罪します。 私はpl/sqlと共にOracle 11g Express Editionを使用しています。私はOracle 11gのSQL Serverのデータベースを変換しようとしています。これまで私はすべてをしてきました。 今、私はproceduresに変換しようとしています。私はすべての変更を行っているが、私は手続きを完全に行うことができない。Oracleでのプロシージャ変換

これは、SQLサーバーの手順のコードです:ORACLEで

create proc Result_proc 
@name varchar(40), 
@Test varchar(40) 
as 
(
select * from [Result View] where ([Student Name] = @name AND Test# IN (@Test)) 
) 

変換されたコード:

create or replace procedure Result_proc ( 
p_name varchar2, 
p_Test varchar2) 
as 
begin 
(
select * from ahmad where (Student_Name = p_name AND Test# IN (p_Test)) 
) 
end; 

ここで私はそれがあるPL/SQLに変換されたコードを実行したときに表示される画像で正常に実行されません:Output of CONVERTED proc in PL/SQL

出力:

SQL> 10 
+0

["SQLは言語です](https://en.wikipedia.org/wiki/SQL)。おそらくSQL Serverを意味しますか?出力をテキストとして投稿してください。[画像ではありません](http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking -a-question/285557#285557)。手続き定義を終了するためにスラッシュ '/'が欠落しているように見えますが? –

+1

新しい言語を学ぶときのヒントは、公式の文書を読むことです。 [PL/SQLユーザーズ・ガイドはこちら](https://docs.oracle.com/cloud/latest/db112/LNPLS/title.htm)を参照してください。あなたのコードには、簡単な構文エラーがいくつかあります。このエラーは、マニュアルの例と比較することで自分自身で見つけることができます。 – APC

答えて

0

SQL Serverでは、このストアドプロシージャは「このSELECTステートメントの結果をクライアントに返します」を意味します。レコードセットを返すのは一般的な方法です。

Oracleを使用する場合、デフォルトの方法は、リファレンスカーソルの出力パラメータを使用することです。この手順は、類似したものに変換する必要があります。

create procedure Result_Proc(p_Name varchar2, p_Test varchar2, p_Result out sys_refcursor) is 
begin 
    open p_result for 
    select * from "Result View" where student_name = p_Name and test# = p_Test; 
end; 

しかし、一般に良い方法は、このような迷惑行為を一切取り除くことです。 MSSQLとは異なり、Oracleではセキュリティコールなどの選択されたSPは必要ありません。より強力で便利な方法は、必要なものを直接選択することです。

関連する問題