Uso de procedimientos almacenados en DataStage
Un procedimiento almacenado es un bloque de construcciones de procedimiento y sentencias SQL incorporadas. Utilice la opción Llamar a procedimiento en la propiedad Método de lectura o Método de escritura de la pestaña Etapa para llamar a un procedimiento almacenado existente desde una base de datos. Utilice la opción Sentencia de procedimiento de llamada para escribir su propia sintaxis de sentencia de procedimiento en el recuadro de texto.
Conectores soportados
Los conectores siguientes dan soporte a procedimientos almacenados. Los procedimientos almacenados se pueden ejecutar en conectores con enlaces de entrada, enlaces de salida o ambos.
- Amazon RDS for PostgreSQL
- IBM Cloud® Databases for PostgreSQL
- IBM Db2®
- IBM® Db2 Big SQL
- IBM Db2 on Cloud
- IBM Db2 for i
- IBM Db2 Warehouse
- IBM Db2 for z/OS®
- Google BigQuery
- Microsoft Azure SQL Database
- Microsoft SQL Server
- Microsoft Azure Synapse Analytics
- Oracle
- PostgreSQL
- SAP ASE
- Snowflake
- Teradata
Procedimientos almacenados en una etapa de origen
Seleccione Añadir valor de retorno de procedimiento al esquema para añadir el código de retorno de procedimiento y el mensaje al esquema como columnas ProcCode y ProcMess. La primera columna del enlace de salida contiene el valor del código. La segunda columna contiene el valor del mensaje. Si también selecciona Reenviar datos de fila, las columnas de entrada se añaden al enlace de salida después de las columnas ProcCode y ProcMess .
Procedimientos almacenados en una etapa de destino
Seleccione Ejecutar procedimiento para cada fila para ejecutar el procedimiento para cada fila de los datos de entrada. Si no selecciona Ejecutar procedimiento para cada fila, el procedimiento solo se ejecutará una vez, para la primera fila. De forma predeterminada, Ejecutar procedimiento para cada fila está seleccionado. Este procedimiento no es compatible con el conector Snowflake.
Sintaxis
?
como marcador de parámetro. La sintaxis siguiente llama a un procedimiento almacenado con el nombre <procedure_name>
en un parámetro de entrada @<column_name>
y la columna de salida ?
, ambos entre paréntesis.CALL <procedure_name>(@<column_name>, ?)
? = CALL <procedure_name>('@<string_column_name>', ?)
En la pestaña Etapa, en Propiedades generales de la fuente si elige Leer método > Llamar sentencia de procedimiento y selecciona Añadir valor de retorno de procedimiento al esquema, entonces dos columnas (ProcCode y ProcMess) se añaden a la salida como las primeras columnas en el esquema de salida.
- Para los conectores (excepto Microsoft SQL Server y SAP ASE), que admiten procedimientos almacenados, proporcione siempre la siguiente sentencia:
CALL (@column_name, ?)
- Para los conectores Microsoft SQL Server y SAP ASE, la sintaxis de
? =
es válida y el código de retorno del procedimiento se captura en?
y se envía a la columna de salida. Siempre debe presentar la siguiente declaración:? = CALL (@column_name, ?)
Si el procedimiento almacenado se llama en una etapa con sólo enlaces de salida, entonces ?
siempre indica un parámetro de salida. Si el procedimiento almacenado se llama en una etapa con sólo enlaces de entrada, entonces ?
siempre indica un parámetro de entrada.
CALL <procedure_name>()
CALL <procedure_name>(?, ?)
CALL <procedure_name>(4,?)
Un procedimiento almacenado para el conector PostgreSQL no puede devolver múltiples filas en los parámetros de salida. Para obtener varias filas, utilice en su lugar la tabla de funciones definidas por el usuario.
Valores de parámetros
En la sección Valores de parámetro de la pestaña Etapa, utilice las especificaciones de parámetro para correlacionar los parámetros de entrada y salida del procedimiento almacenado con las columnas de entrada y salida. Determina en qué columnas se devuelven los datos. Los nombres de los parámetros en la pestaña Etapa deben coincidir con los nombres de los parámetros en su procedimiento almacenado. Cada nombre de parámetro se puede correlacionar con una sola columna. Si no se proporciona una asignación, los datos de salida de cada columna se devuelven en el orden en que se especifican las columnas. Un conector con un enlace de entrada tendrá parámetros de entrada, un conector con un enlace de salida tendrá parámetros de salida y un conector con enlaces de entrada y salida tendrá ambos.
- @
- El valor predeterminado para el parámetro. El valor de la columna que se especifica en la asignación se pasa al parámetro.
- Literal
- Una constante especificada como parámetro de entrada. Se utiliza el valor de la constante y se descarta el valor del enlace de entrada.
- Parámetro local o parámetro de un conjunto de parámetros
- Para un parámetro de un conjunto de parámetros, utilice el formato
(#name#)
. Se utiliza el valor del parámetro y se descarta el valor del enlace de entrada.
Cada parámetro debe asignarse a la columna de entrada. Por ejemplo, P1 debe asignarse a COLUMN_1 y P2 a COLUMN_2. La asignación de parámetros no sustituye a la definición de columna. Sin embargo, puede descartar el valor de un enlace de entrada y utilizar el valor de la columna Marcador/Literal.
Parámetros opcionales
Puede utilizar parámetros opcionales sólo para los procedimientos almacenados. Las funciones definidas por el usuario no admiten parámetros opcionales. Un procedimiento almacenado puede tener uno o más parámetros opcionales. Si desea omitir parámetros opcionales al llamar a un procedimiento almacenado, utilice la sentencia Call procedure. Si un procedimiento almacenado tiene uno o más parámetros opcionales, todos los parámetros opcionales deben definirse después de los parámetros de salida. Los parámetros opcionales con el valor " Null " deben agruparse al final.
- IBM Db2
- IBM Db2 Big SQL
- IBM Db2 on Cloud
- IBM Db2 for i
- IBM Db2 Warehouse
- Microsoft Azure SQL Database
- Microsoft SQL Server
- Oracle
- Snowflake
Ejemplo: Un procedimiento almacenado ' MYSCHEMA.MYSP
tiene dos parámetros de entrada obligatoriosinparam1, inparam2), dos entradas opcionalesoptinparam3, optinparam4), y dos parámetros de salida. Consulte los siguientes ejemplos de uso válido e inválido de la sentencia Call procedure:
Válido:
CALL MYSCHEMA.MYSP(inparam1, inparam2, ?, ?, optinparam3, optinparam4)
En este caso se utiliza el valor de entrada para " optinparam3 " y el valor por defecto para " optinparam4 ":CALL MYSCHEMA.MYSP(inparam1, inparam2, ?, ?, optinparam3)
In this case the default value for both optinparam3 and optinparam4 is used:CALL MYSCHEMA.MYSP(in1, in2, ?, ?)
CALL MYSCHEMA.MYSP(inparam1, inparam2, optinparam3, optinparam4, ?, ?)
CALL MYSCHEMA.MYSP(inparam1, inparam2, ?, ?, , optinparam4)
Tiempo de espera de consulta
Para consultas de larga ejecución y procedimientos almacenados, establezca la propiedad Tiempo de espera de consulta para limitar el número de segundos durante los que se ejecuta un procedimiento. El valor predeterminado es de 300 segundos. Si establece un valor mayor que 600 segundos, también debe editar la variable de entorno $OSH_JOB_START_TIMEOUT
y establecer un valor mayor que el Tiempo de espera de consulta. Esta propiedad está disponible en Microsoft SQL Server, Microsoft Azure SQL Database, IBM Db2, IBM
Db2 Big SQL, IBM Db2 on Cloud, IBM Db2 for i, IBM Db2
Warehousee IBM Db2 for z/OS.
Funciones definidas por el usuario (UDF)
Cuando se selecciona Llamar a procedimiento o Llamar a sentencia de procedimiento , puede seleccionar Función definida por el usuario para especificar una función definida por el usuario que ejecutar. Una función definida por el usuario puede tomar parámetros de entrada y devuelve un único valor (para funciones escalares) o un conjunto de valores (para funciones de tabla). Esta propiedad está disponible en ' Amazon RDS for PostgreSQL, ' Db2, ' IBM Cloud Databases for PostgreSQL, ' IBM Db2 Big SQL, ' IBM ' Db2 on Cloud, ' IBM ' Db2 for i, ' IBM ' Db2 Warehouse, ' IBM ' Db2 for z/OS, ' PostgreSQL, ' Snowflake, y ' Teradata. En IBM ' Db2 for z/OS, las funciones definidas por el usuario deben llamarse como parte de una sentencia SELECT. En Teradata, las funciones de tipo macro también están disponibles.
Las funciones definidas por el usuario admiten los modos fuente y transformación. En el modo Fuente, los datos se leen de la base de datos. En el modo Transformación, los datos se leen, se transforman y se escriben en el nodo de destino.
- Escalar
- Devuelve un único valor.
- Tabla
- Devuelve una tabla.
- Para función escalar definida por el usuario:
SELECT “Sclr_udf_name”(@arg1,@arg2,…);
- Para la función definida por el usuario de la tabla:
SELECT * FROM “table_udf_name”(@arg1,@arg2,…);