2012-02-01 35 views
1

私が書いたスマート・プロシージャを使用したいが、格納しないでください。例えば、ここにテーブルの主キーを取得することを選択し、このかなり大きいです:oracleプロシージャを作成する方法はありますが、格納する方法はありません

SELECT cols.table_name, cols.column_name, cols.position, cons.status, cons.owner 
FROM all_constraints cons, all_cons_columns cols 
WHERE cols.table_name = 'TABLE_NAME' 
AND cons.constraint_type = 'P' 
AND cons.constraint_name = cols.constraint_name 
AND cons.owner = cols.owner 
ORDER BY cols.table_name, cols.position; 

私もそれを私はテーブルの制約を必要とするたびに入力しないで、これを覚えておく必要はありません。しかし、私はこれをDBにするためのプロシージャを作成したくないです。なぜなら、それはプロードされたDBであり、誰も私のプロシージャを必要としないからです。私だけ。ちょうど開発のため。

SQL> declare procedure hello as begin dbms_output.put_line('Hello world!'); end; begin hello; end; 
    2/
Hello world! 

PL/SQL procedure successfully completed. 

SQL> hello; 
SP2-0042: unknown command "hello" - rest of line ignored. 

...ので、私は、コマンドラインからhello関数を宣言して定義することができます。私は今の私どこだからここ

です。私は宣言の後のbegin - endブロックから呼び出すことができますが、その後はhelloプロシージャはなくなりました。

質問:2番目の「こんにちは」を作るための解決策がありますか?私は賢明で有益な手続きを作成することができますし、DB自体にゴミを入れないでください。

これがうまくいくならば、私はそのファイルを作成し、sqlplusのエイリアスを起動時にそのファイルを実行するようにします。

+1

別のスキーマを作成してそこにプロシージャを置くことができます。あなたはプロダクションユーザーを怒らせません.... –

+1

あなたはプロダクトDBで開発しています:) –

+0

大丈夫です、それは刺激されませんが、他の多くの開発者がそれを使用し、それを汚染することは望ましくありません。 – torbatamas

答えて

3

をあなたはあなたのクエリのそれぞれを置くことができます:例

--c:\temp\helloworld.sql 

begin 
    dbms_output.put_line('Hello World'); 
end; 
/

について、データベースにログインし、実行します。

SQL> set serveroutput on 
SQL> @c:\temp\helloworld 

を、あなたが取得する必要がありますSQLPATHディレクトリー内の独自のファイル内にありますが、位置指定パラメーターを使用してください。例えば* SQLからザ・

SELECT cols.table_name, cols.column_name, cols.position, cons.status, cons.owner 
FROM all_constraints cons, all_cons_columns cols 
WHERE cols.table_name = '&1' 
AND cons.constraint_type = 'P' 
AND cons.constraint_name = cols.constraint_name 
AND cons.owner = cols.owner 
ORDER BY cols.table_name, cols.position; 

プラスあなただけ行うことができます:ファイルがpkeys.sql呼ば

@pkeys TABLE_NAME 

それはあなたがまだあなたのdeclare procedure ... begin ... endフォームを持っている、との通話パス&1を持つことができる手順であれば手順。実際には、これはStevieGがやっていたものとほとんど同じですが、そのたびにファイルを編集する必要性を排除する位置パラメータを使用しています。

+0

これは何ですか私は欲しかった!ダンケ:) – torbatamas

3

スクリプトファイルにプロシージャを置き、@演算子を使用してコマンドラインから実行できます。 (彼らは本当にprocsのある?)

Hello World 

PL/SQL procedure successfully completed. 
+0

私はこれについて考えましたが、コマンドラインから 'hello'プロシージャを使用することはできず、helloworld.sqlをテキストエディタで編集しなければなりません。次に@c:\ temp \ helloworld ... – torbatamas

関連する問題