Escribir el conjunto de resultados de la tabla de datos en la tabla de Oracle existente<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola,
Soy muy nuevo en las secuencias de comandos JMP. He creado un script para leer desde una tabla de Oracle. Aplica un Fit_Model a los datos (no pudo replicar esto en Oracle, de ahí la necesidad de JMP) y desea volver a escribirlo en Oracle.
En este momento estoy usando dt3<
Esto crea la tabla, pero realmente necesitaría poder INSERTAR EN una tabla existente en lugar de crear una nueva tabla.
Cualquier ayuda sería muy apreciada, ya que digo que soy nuevo en el script JMP y no puedo encontrar la respuesta en el manual de JMP Script.
Gracias,
Re: Escribir el conjunto de resultados de la tabla de datos en una tabla de Oracle existenteSolo quería actualizar este hilo con nueva información.Estaba tratando de hacer múltiples inserciones (~8000) en una tabla de Oracle y me encontré con problemas de rendimiento al insertar un registro a la vez.El "truco" es usar el INSERTAR TODO EN dominio.El siguiente código inserta 200 registros a la vez.
dt = tabla de datos ( "Datos aleatorios" ) ;
cadena_dsn = "Driver={Oracle en OraClient11g64};Dbq=;UID=;PWD=;" ;
dbc = crear conexión de base de datos ( cadena_dsn ) ;
declaración_sql =
"\[CREAR TABLA .FYI_RANDOM
(NÚMERO DE IDENTIFICACIÓN,
NÚMERO ALEATORIO_INTEGER,
RAND_NUMBER NÚMERO,
RAND_DATETIME FECHA,
RAND_STRING VARCHAR2(80))]\" ;
ejecutar sql ( dbc , declaración_sql ) ;
// Eliminar filas de la tabla (para pruebas repetidas)
ejecutar sql ( dbc , "tabla truncada .fyi_random" ) ;
t2 = Segundos de marca () ;
max_inserciones = 200 ; // Haz 200 inserciones a la vez
declaración_sql = "INSERTAR TODO" ;
para ( i = 1 , i <= filas ( dt ) , i ++,
idc = dt : identificación [ i ] ;
rand_integerc = dt : rand_entero [ i ] ;
rand_numberc = dt : número_al azar [ i ] ;
rand_datetimec = formato ( dt : rand_datetime [ i ] , "m/d/a:m:s" ) ;
cadena_randC = dt : cadena_rand [ i ] ;
declaración_sql = declaración_sql || Evalinsert (
" EN .FYI_RANDOM(ID, RAND_INTEGER, RAND_NUMBER, RAND_DATETIME, RAND_STRING)
VALORES(^idc^, ^rand_integerc^, ^rand_numberc^,
to_date('^rand_datetimec^', 'MM/DD/AAAA HH:MI:SS AM'),
'^rand_stringc^')
" ) ;
si ( modificación ( i , max_inserciones ) == 0 ,
// Extraño: INSERTAR TODO EN requiere una declaración SELECCIONAR al final: use una ficticia
declaración_sql = declaración_sql || " SELECCIONE 1 DE DOBLE" ;
ejecutar sql ( dbc , declaración_sql ) ;
declaración_sql = "INSERTAR TODO" ;
) ;
si ( modificación ( i , 200 ) == 0 ,
subtítulo ( "insertado" || carbonizarse ( i ) || " registros" ) ;
esperar ( 0 ) ;
) ;
) ;
// A ver si queda algo por hacer
si ( declaración_sql != "INSERTAR TODO" ,
ejecutar sql ( dbc , declaración_sql ) ;
) ;
cerrar la conexión a la base de datos ( dbc ) ;
t1 = marcar segundos () ;
imprimir ( t1 - t2 ) ;
subtítulo ( eliminar ) ;
esperar ( 0 ) ;
El INSERTAR TODO EN El comando en realidad no es tan nuevo: los ejemplos que encontré en línea lo muestran funcionando en Oracle 9. Aquí hay algunos enlaces con más información:
https://www.techonthenet.com/oracle/questions/insert_rows.php
sql - ¿La mejor manera de insertar varias filas en Oracle? - Desbordamiento de pila
Re: Escribir el conjunto de resultados de la tabla de datos en una tabla de Oracle existente¡¡Esto funcionó!!
Muchas gracias por toda su ayuda, realmente lo aprecio
Re: Escribir el conjunto de resultados de la tabla de datos en una tabla de Oracle existente¿Quizás las columnas de su tabla JMP son numéricas?Eso es lo que indica el mensaje de error.También le faltan algunas comillas simples para algunas de las columnas.Intente envolver cada columna con la función CHAR.Si eso aún no funciona, imprima su variable sql_statement.
Tabla de datos actual ( dt ) ;
dbc = Crear conexión de base de datos (
"CONTROLADOR={Oracle en instantclient11_1};DBQ=DBASE;UID=UNAME;SPWD=PWORD;"
) ;
Para ( i = 1 , i <= n filas ( dt ) , i ++,
declaración_sql = "INSERTAR EN SCHEMA.TBL_TABLE" ||
"(COL1, COL2, COL3, COL4, COL5, COL6, COL7, COL8) " ||
"VALORES(" || "'" ||
carbonizarse ( Columna ( 1 )[ i ]) || "', '" || carbonizarse ( Columna ( 2 )[ i ]) || "', '" ||
carbonizarse ( Columna ( 3 )[ i ]) || "', '" || carbonizarse ( Columna ( 4 )[ i ]) || "', '" ||
carbonizarse ( Columna ( 5 )[ i ]) || "', '" || carbonizarse ( Columna ( 6 )[ i ]) || "', '" ||
carbonizarse ( Columna ( 7 )[ i ]) || "', '" || carbonizarse ( Columna ( 8 )[ i ]) || "') " ;
imprimir ( declaración_sql ) ;
Ejecutar SQL ( dbc , declaración_sql ) ;
) ;
Cerrar conexión de base de datos ( dbc ) ;
Re: Escribir el conjunto de resultados de la tabla de datos en una tabla de Oracle existenteHola,
Intenté trabajar con esto pero obtuve un error que aparentemente se debe a la concatenación.
Todas las columnas de la tabla son VARCHAR2, la concatenación se ve bien desde el punto de vista de un desarrollador de Oracle.
¿Podría por favor ayudarme a pasar la línea de meta?
el argumento debe ser un carácter en el acceso o evaluación de 'Concat', argumento incorrecto (columna (5) )
En el siguiente script, error marcado por /*###*/
Tabla de datos actuales (dt);
dbc = Crear conexión de base de datos (
"CONTROLADOR={Oracle en instantclient11_1};DBQ=DBASE;UID=UNAME;SPWD=PWORD;"
);
Para( i = 1, i <= N filas( dt ), i++,
sql_statement = "INSERTAR EN SCHEMA.TBL_TABLE" || /*###*/
"(COL1, COL2, COL3, COL4, COL5, COL6, COL7, COL8) " || /*###*/
"VALORES(" || /*###*/"'" || /*###*/Columna( 1 ) || /*###*/"', " || /*###*/
"'" || /*###*/Columna( 2 ) || /*###*/"', " || /*###*/"'" || /*###*/
columna( 3 ) || /*###*/"', " || /*###*/Columna( 4 ) || /*###*/", " || /*###*/
columna( 5 ) || /*###*/", " || /*###*/Columna( 6 ) || /*###*/", " || /*###*/
columna( 7 ) || /*###*/", " || /*###*/"'" || /*###*/Columna( 8 ) || /*###*/
"') " /*###*/;
Ejecute SQL (dbc, sql_statement);
);
Cerrar la conexión de la base de datos (dbc);
Re: Escribir el conjunto de resultados de la tabla de datos en una tabla de Oracle existenteGerardo,
Ya casi estás ahí.Para agregar múltiples registros, debe recorrer las filas en su tabla JMP y emitir declaraciones INSERT separadas.
dt = rftmdl [ 1 ][ Caja de mesa ( 3 )] << hacer una tabla de datos combinada ( "Tbl_Combinado" ) ;
tabla de datos actual ( dt ) ;
dbc = Crear conexión de base de datos ( "CONTROLADOR={Oracle en instantclient11_1};DBQ=DBNAME;UID=USUARIO;SPWD=PASS;" ) ;
para ( i = 1 , i <= filas ( dt ) , i ++,
declaración_sql =
"INSERTAR EN SCHEMA.TBL_TABLE" ||
"(col1, col2, col3, col4, col5, col6, col7, col8)" ||
"VALORES(" ||
"'" || columna ( 1 )[ i ] || "', " ||
"'" || columna ( 2 )[ i ] || "', " ||
"'" || columna ( 3 )[ i ] || "', " ||
columna ( 4 )[ i ] || ", " ||
columna ( 5 )[ i ] || ", " ||
columna ( 6 )[ i ] || ", " ||
columna ( 7 )[ i ] || ", " ||
"'" || columna ( 8 )[ i ] || "') " ;
// JMP agregará una confirmación a la declaración de inserción.
Ejecutar SQL ( dbc , declaración_sql ) ;
) ;
Cerrar conexión de base de datos ( dbc ) ;
Para hacer referencia a una celda de tabla individual, puede usar una sintaxis como esta:
columna ( 1 )[ 3 ] ; // Hace referencia a la celda de la tabla de datos actual, en la primera columna, fila 3
columna ( dt , 5 )[ 7 ] ; // Celda en la columna 5, fila 7 de la tabla a la que hace referencia la variable dt
columna ( dt , "Mundo" )[ 2 ] ; // Celda en la columna denominada Mundo, fila 2, en la tabla a la que hace referencia dt.Esta es la sintaxis que uso con más frecuencia.
: Mundo [ 2 ] ; // Celda en la columna Mundo, fila 2, en la tabla de datos actual.
¡Buena suerte!
Pedro
Re: Escribir el conjunto de resultados de la tabla de datos en una tabla de Oracle existenteMuchas gracias por responder.
Con los valores que introduzco, ¿cómo puedo especificar que son de la tabla de datos?
He intentado simplemente usar la columna (1), etc., pero esto no funciona. Tengo experiencia en PL/SQL, por lo que mi cerebro dice dt.column(1), pero esto no funciona.
¿Puedes por favor aclarar?
dt=rftmdl[1][Cuadro de tabla(3)] << hacer tabla de datos combinada("Tbl_Combinied");
sentencia_sql =
"INSERTAR EN SCHEMA.TBL_TABLE" ||
"(col1, col2, col3, col4, col5, col6, col7, col8) " ||
"VALORES(" ||
"'" || columna(1) || "', " ||
"'" || columna(2)|| "', " ||
"'" || columna(3)|| "', " ||
columna(4)|| ", " ||
columna(5)|| ", " ||
columna(6)|| ", " ||
columna(7)|| ", " ||
"'" || columna(8) || "') ";
dbc = Crear conexión de base de datos ("CONTROLADOR = {Oracle en instantclient11_1}; DBQ = DBNAME; UID = USUARIO; SPWD = CONTRASEÑA;");
// JMP agregará una confirmación a la declaración de inserción.
Ejecutar SQL(dbc, sql_statement);
Cerrar conexión de base de datos (dbc);
Además, si conoce algún enlace útil o guías de secuencias de comandos JMP, toda ayuda es ampliamente aceptada.
Gracias de nuevo.
Re: Escribir el conjunto de resultados de la tabla de datos en una tabla de Oracle existenteSi está en JMP 10, así es como se inserta un registro.Tenga en cuenta que DSN_STRING es la cadena de conexión a mi base de datos.Tenga en cuenta también que la cadena SQL debe estar en una línea continua, sin comentarios.
declaración_sql =
"INSERTAR EN myschema.mytable" ||
"(una_columna, segunda_columna, tercera_columna)" ||
"VALORES(" ||
"'" || primer_valor || "', " ||
"'" || segundo_valor || "', " ||
"'" || tercer_valor || "') " ;
dbc = Crear conexión de base de datos ( cadena_dsn ) ;
// JMP agregará una confirmación a la declaración de inserción.
Ejecutar SQL ( dbc , declaración_sql ) ;
Cerrar conexión de base de datos ( dbc ) ;
// En JMP 8 o 9 solo usa esto:
// Abrir base de datos (dsn_string, sql_statement);