2011-01-26 31 views
6

PL/SQLでは、TABLE.COLUMN_NAME%タイプの構文を使用して、プロシージャ変数および引数の表の列の型を参照できます。これにより、コードのメンテナンスがずっと簡単になります。 mysqlストアドプロシージャ言語にこれに相当するものがありますか?Mysqlストアド・プロシージャ列型参照

ここではこれが必要な場合がありますか?

CREATE FUNCTION normalizeEmail(email RAW_NL_LIST.EMAIL%type) 
RETURNS NL_LIST.EMAIL%type 
BEGIN 
... implementation here 
END; 
+0

どんな文脈では?あなたはこれを行う場所でクエリの例を挙げることができますか? – TehShrike

+0

概念の説明については、http://www.dba-oracle.com/plsql/t_plsql_var_const.htmを参照してください。 –

+0

プロシージャを記述する場合は、いくつかの変数を宣言する必要があります。これらは、主にテーブルの列から入力を受け取ります。変数の型が指定された列の値と互換性があるようにするには、上記の構文を使用して、テーブルの列の型に基づいて変数を宣言します。これは、PL/SQLをプログラミングするときのベスト・プラクティスと見なされます。私の質問は、同じ種類のことがmysqlで可能かどうかでした。 –

答えて

4

いいえ、あなたは自動的に使用されるタイプと一致することはできません:私は(約)次のようにnormalizeEmailを定義できるようにしたいと思います。このため

INSERT INTO NL_LIST (NAME, EMAIL) 
    SELECT 
     NAME, 
     normalizeEmail(EMAIL) 
    FROM 
     RAW_NL_LIST; 

:次のINSERT文を考えてみましょうストアドプロシージャの型を持つテーブル定義。 テーブル定義を自分で検索し、正しいタイプを入力する必要があります。

参照:http://dev.mysql.com/doc/refman/5.6/en/create-procedure.html

ここでは述べている:あなたは、テーブル内の列を参照している

CREATE 
[DEFINER = { user | CURRENT_USER }] 
PROCEDURE sp_name ([proc_parameter[,...]]) 
[characteristic ...] routine_body 

CREATE 
    [DEFINER = { user | CURRENT_USER }] 
    FUNCTION sp_name ([func_parameter[,...]]) 
    RETURNS type 
    [characteristic ...] routine_body 

proc_parameter: 
    [ IN | OUT | INOUT ] param_name type 

func_parameter: 
    param_name type 

type: 
    Any valid MySQL data type <<<-- no special magic allowed 

.... 
関連する問題