2011-01-26 17 views
6

En PL/SQL puede hacer referencia al tipo de una columna de tabla para variables y argumentos de procedimiento utilizando la sintaxis TABLE.COLUMN_NAME% type. Esto hace que el mantenimiento del código sea mucho más fácil. ¿Hay un equivalente de esto en el lenguaje de procedimientos almacenados de mysql?Mysql Stored Procedures Referencia de tipo de columna

¿Dónde podría uno necesitar esto? Considere la instrucción de inserción:

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

Por esto me gustaría ser capaz de definir normalizeEmail en (más o menos) de la siguiente manera:

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

¿En qué contexto se le referenciando columnas en las tablas? ¿Puedes dar un ejemplo de una consulta en la que harías esto? – TehShrike

+0

Consulte http://www.dba-oracle.com/plsql/t_plsql_var_const.htm para obtener una explicación del concepto. –

+0

Si escribe un procedimiento, es probable que necesite declarar algunas variables. Estos, a su vez, principalmente toman entrada de las columnas de la tabla. Para asegurarse de que el tipo de su variable sea compatible con el valor de la columna suministrada, puede usar la sintaxis antes mencionada para declarar las variables en base al tipo de la columna de la tabla. Esto se considera la mejor práctica al programar PL/SQL. Mi pregunta era si el mismo tipo de cosas es posible en mysql. –

Respuesta

4

No, no se puede hacer coincidir automáticamente el tipo usado en el tabla de definición con el tipo en un procedimiento almacenado. Tendrá que buscar usted mismo la definición de tabla e ingresar el tipo correcto.

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

aquí dice:

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 

.... 
Cuestiones relacionadas