usuario por funciones error descargar definidas db2 db2-luw

por - DB2 ¿Crear tabla X cuando X es una variable?



db2 express-c (2)

Creé un archivo abc contiene:

create table TNAME (foo varchar(10))

Luego lo hice, en una línea de comandos de Unix:

sed s/TNAME/xyz/g abc | db2

que creó una tabla llamada xyz en DB2 como yo quería. Gracias.

En Oracle, hacemos esto:

def TNAME=&1 create table &TNAME (foo varchar(10));

¿Cómo hacer el equivalente para DB2? Las restricciones son:

1. The create table statement is generated when TNAME is unknown 2. The create table statement is in a file which cannot be modified 3. Cannot create a temporary file with TNAME substituted by awk 4. Essentially we want to pass in the table name at run time as an argument

¿Posible?


La sentencia EXECUTE IMMEDIATE se puede usar en cualquier bloque de SQL que esté rodeado por BEGIN y END, como un procedimiento almacenado o una sentencia compuesta anónima.

CREATE PROCEDURE create_table_from_file( IN fileDir VARCHAR( 1024 ), IN fileName VARCHAR( 128 ), IN tabSchema VARCHAR( 128 ), IN tabName VARCHAR( 128 ) ) BEGIN DECLARE fh UTL_FILE.FILE_TYPE; DECLARE sqlStmt VARCHAR( 32672 ); DECLARE currentLine VARCHAR( 32672 ); DECLARE SQLCODE INTEGER DEFAULT 0; DECLARE SQLSTATE CHAR(5) DEFAULT ''00000''; DECLARE SQLSTATE1 CHAR(5) DEFAULT ''00000''; DECLARE CONTINUE HANDLER FOR SQLSTATE ''ORANF'' SET SQLSTATE1 = SQLSTATE; SET sqlStmt = ''CREATE TABLE '' || CASE WHEN ( NULLIF( tabSchema, '''' ) IS NOT NULL ) THEN RTRIM( tabSchema ) || ''.'' ELSE '''' END || tabName; CALL UTL_DIR.CREATE_OR_REPLACE_DIRECTORY( ''createTablePath'', fileDir ); SET fh = UTL_FILE.FOPEN( ''createTablePath'', fileName, ''r'' ); loop1: LOOP CALL UTL_FILE.GET_LINE( fh, currentLine ); IF SQLSTATE1 = ''ORANF'' THEN -- NO DATA FOUND LEAVE loop1; END IF; SET sqlStmt = sqlStmt || '' '' || currentLine ; END LOOP; EXECUTE IMMEDIATE sqlStmt; END @