Ergebnissatz der Datentabelle in vorhandene Oracle-Tabelle schreiben<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo,
Ich bin sehr neu in der JMP-Skripterstellung. Ich habe ein Skript zum Einlesen aus einer Oracle-Tabelle erstellt. Es wendet ein Fit_Model auf die Daten an (konnte dies in Oracle nicht replizieren, daher ist JMP erforderlich) und möchte es wieder an Oracle schreiben.
Im Moment verwende ich dt3<
Dadurch wird die Tabelle erstellt, aber ich müsste wirklich in der Lage sein, IN eine vorhandene Tabelle einzufügen, anstatt eine neue Tabelle zu erstellen.
Jede Hilfe wäre sehr willkommen, da ich sagen muss, dass ich ganz neu bei JMP Script bin und keine Antwort im JMP Script Handbuch finden kann.
Danke,
Betreff: Ergebnismenge der Datentabelle in vorhandene Oracle-Tabelle schreibenIch wollte diesen Thread nur mit einigen neuen Informationen aktualisieren.Ich habe versucht, mehrere Einfügungen (~ 8000) in eine Oracle-Tabelle durchzuführen, und bin auf Leistungsprobleme gestoßen, als ich jeweils einen Datensatz eingefügt habe.Der "Trick" besteht darin, die zu verwenden ALLE EINFÜGEN Befehl.Der folgende Code fügt 200 Datensätze gleichzeitig ein.
dt = Datentabelle ( "RandomData" ) ;
dsn_string = "Driver={Oracle in OraClient11g64};Dbq=;UID=;PWD=;" ;
dbc = Datenbankverbindung herstellen ( dsn_string ) ;
sql_statement =
"\[CREATE TABLE .FYI_RANDOM
(ID-NUMMER,
RAND_INTEGER ZAHL,
RAND_NUMBER NUMMER,
RAND_DATETIME DATE,
RAND_STRING VARCHAR2(80))]\" ;
SQL ausführen ( dbc , sql_statement ) ;
// Zeilen aus der Tabelle entfernen (für wiederholtes Testen)
SQL ausführen ( dbc , "Tabelle .fyi_random abschneiden" ) ;
t2 = Sekunden ankreuzen () ;
max_inserts = 200 ; // Führe 200 Einfügungen gleichzeitig durch
sql_statement = "ALLE EINFÜGEN" ;
für ( ich = 1 , ich <= näht ( dt ) , ich ++,
IDC = dt : Ausweis [ ich ] ;
rand_integerc = dt : rand_integer [ ich ] ;
rand_numberc = dt : rand_number [ ich ] ;
rand_datetimec = Format ( dt : rand_datetime [ ich ] , "m/d/yh:m:s" ) ;
rand_stringC = dt : rand_string [ ich ] ;
sql_statement = sql_statement || evalinsert (
" IN .FYI_RANDOM(ID, RAND_INTEGER, RAND_NUMBER, RAND_DATETIME, RAND_STRING)
WERTE(^idc^, ^rand_integerc^, ^rand_numberc^,
to_date('^rand_datetimec^', 'MM/TT/JJJJ HH:MI:SS AM'),
'^rand_stringc^')
" ) ;
Wenn ( Mod ( ich , max_inserts ) == 0 ,
// Seltsam - INSERT ALL INTO erfordert eine SELECT-Anweisung am Ende - verwenden Sie eine Dummy-Anweisung
sql_statement = sql_statement || " 1 VON DUAL AUSWÄHLEN" ;
SQL ausführen ( dbc , sql_statement ) ;
sql_statement = "ALLE EINFÜGEN" ;
) ;
Wenn ( Mod ( ich , 200 ) == 0 ,
Untertitel ( "Eingefügt" || verkohlen ( ich ) || „Aufzeichnungen“ ) ;
Warten ( 0 ) ;
) ;
) ;
// Sehen Sie, ob es noch etwas zu tun gibt
Wenn ( sql_statement != "ALLE EINFÜGEN" ,
SQL ausführen ( dbc , sql_statement ) ;
) ;
Datenbankverbindung schließen ( dbc ) ;
t1 = Sekunden ticken () ;
drucken ( t1 - t2 ) ;
Untertitel ( entfernen ) ;
Warten ( 0 ) ;
Der ALLE EINFÜGEN Der Befehl ist eigentlich nicht so neu - die Beispiele, die ich online gefunden habe, zeigen, dass er in Oracle 9 funktioniert. Hier sind einige Links mit weiteren Informationen:
https://www.techonthenet.com/oracle/questions/insert_rows.php
sql - Beste Möglichkeit, mehrzeilige Einfügungen in Oracle durchzuführen? - Paketüberfluss
Betreff: Ergebnismenge der Datentabelle in vorhandene Oracle-Tabelle schreibenDas hat funktioniert!!
Vielen Dank für all Ihre Hilfe, ich weiß das wirklich zu schätzen
Betreff: Ergebnismenge der Datentabelle in vorhandene Oracle-Tabelle schreibenVielleicht sind Ihre JMP-Tabellenspalten numerisch?Darauf weist die Fehlermeldung hin.Außerdem fehlen Ihnen einige einfache Anführungszeichen für einige der Spalten.Versuchen Sie, jede Spalte mit der CHAR-Funktion zu umschließen.Wenn das immer noch nicht funktioniert, drucken Sie Ihre sql_statement-Variable aus.
Aktuelle Datentabelle ( dt ) ;
dbc = Datenbankverbindung erstellen (
"DRIVER={Oracle in instantclient11_1};DBQ=DBASE;UID=UNAME;SPWD=PWORD;"
) ;
Für ( ich = 1 , ich <= N Zeilen ( dt ) , ich ++,
sql_statement = "IN SCHEMA.TBL_TABLE EINFÜGEN" ||
"(COL1, COL2, COL3, COL4, COL5, COL6, COL7, COL8) " ||
"WERTE(" || "'" ||
verkohlen ( Spalte ( 1 )[ ich ]) || "', '" || verkohlen ( Spalte ( 2 )[ ich ]) || "', '" ||
verkohlen ( Spalte ( 3 )[ ich ]) || "', '" || verkohlen ( Spalte ( 4 )[ ich ]) || "', '" ||
verkohlen ( Spalte ( 5 )[ ich ]) || "', '" || verkohlen ( Spalte ( 6 )[ ich ]) || "', '" ||
verkohlen ( Spalte ( 7 )[ ich ]) || "', '" || verkohlen ( Spalte ( 8 )[ ich ]) || "') " ;
drucken ( sql_statement ) ;
Führen Sie SQL aus ( dbc , sql_statement ) ;
) ;
Datenbankverbindung schließen ( dbc ) ;
Betreff: Ergebnismenge der Datentabelle in vorhandene Oracle-Tabelle schreibenHallo,
Ich habe versucht, damit zu arbeiten, aber einen Fehler erhalten, der anscheinend auf die Verkettung zurückzuführen ist.
Alle Spalten in der Tabelle sind VARCHAR2, die Verkettung sieht aus Sicht eines Oracle-Entwicklers gut aus.
Könnten Sie mir bitte helfen, die Ziellinie zu überqueren?
Argument sollte ein Zeichen im Zugriff oder in der Auswertung von 'Concat' sein, Bad Argument( Column( 5 ) )
Im folgenden Skript Fehler markiert mit /*###*/
Aktuelle Datentabelle (dt);
dbc = Datenbankverbindung erstellen (
"DRIVER={Oracle in instantclient11_1};DBQ=DBASE;UID=UNAME;SPWD=PWORD;"
);
For( i = 1, i <= N Zeilen( dt ), i++,
sql_statement = "INSERT INTO SCHEMA.TBL_TABLE " || /*##*/
"(COL1, COL2, COL3, COL4, COL5, COL6, COL7, COL8) " || /*##*/
"WERTE(" || /*###*/"'" || /*###*/Spalte( 1 ) || /*###*/"', " || /*##****/
"'" || /*###*/Spalte( 2 ) || /*###*/"', " || /*####/"'" || /*##*/
Spalte( 3 ) || /*###*/"', " || /*####/Spalte( 4 ) || /*####/", " || /*##*/
Spalte( 5 ) || /*####/", " || /*###*/Spalte( 6 ) || /*####/", " || /*##*/
Spalte( 7 ) || /*####/", " || /*####/"'" || /*###*/Spalte( 8 ) || /*##*/
"') " /*###*/;
Führen Sie SQL ( dbc, sql_statement ) aus;
);
Datenbankverbindung schließen ( dbc );
Betreff: Ergebnismenge der Datentabelle in vorhandene Oracle-Tabelle schreibenGerhard,
Du bist fast da.Um mehrere Datensätze hinzuzufügen, müssen Sie die Zeilen in Ihrer JMP-Tabelle durchlaufen und separate INSERT-Anweisungen ausgeben.
dt = rftmdl [ 1 ][ Tischbox ( 3 )] << kombinierte Datentabelle erstellen ( "Tbl_Combinied" ) ;
aktuelle Datentabelle ( dt ) ;
dbc = Datenbankverbindung erstellen ( "DRIVER={Oracle in instantclient11_1};DBQ=DBNAME;UID=USER;SPWD=PASS;" ) ;
für ( ich = 1 , ich <= näht ( dt ) , ich ++,
sql_statement =
"IN SCHEMA.TBL_TABLE EINFÜGEN" ||
"(Spalte1,Spalte2,Spalte3,Spalte4,Spalte5,Spalte6,Spalte7,Spalte8)" ||
"WERTE(" ||
"'" || Spalte ( 1 )[ ich ] || "', " ||
"'" || Spalte ( 2 )[ ich ] || "', " ||
"'" || Spalte ( 3 )[ ich ] || "', " ||
Spalte ( 4 )[ ich ] || ", " ||
Spalte ( 5 )[ ich ] || ", " ||
Spalte ( 6 )[ ich ] || ", " ||
Spalte ( 7 )[ ich ] || ", " ||
"'" || Spalte ( 8 )[ ich ] || "') " ;
// JMP fügt der Insert-Anweisung ein Commit hinzu.
Führen Sie SQL aus ( dbc , sql_statement ) ;
) ;
Datenbankverbindung schließen ( dbc ) ;
Um auf eine einzelne Tabellenzelle zu verweisen, können Sie folgende Syntax verwenden:
Spalte ( 1 )[ 3 ] ; // Bezieht sich auf die Zelle in der aktuellen Datentabelle, in der ersten Spalte, Zeile 3
Spalte ( dt , 5 )[ 7 ] ; // Zelle in Spalte 5, Zeile 7 der Tabelle, auf die sich die Variable dt bezieht
Spalte ( dt , "Welt" )[ 2 ] ; // Zelle in Spalte World, Zeile 2, in der Tabelle, auf die dt verweist.Dies ist die Syntax, die ich am häufigsten verwende
: Welt [ 2 ] ; // Zelle in Spalte Welt, Zeile 2, in der aktuellen Datentabelle.
Viel Glück!
Peter
Betreff: Ergebnismenge der Datentabelle in vorhandene Oracle-Tabelle schreibenVielen Dank für Ihre Antwort.
Wie kann ich bei den eingegebenen Werten angeben, dass sie aus der Datentabelle stammen?
Ich habe versucht, einfach Spalte (1) usw. zu verwenden, aber das funktioniert nicht. Ich habe einen PL/SQL-Hintergrund, also sagt mein Gehirn dt.column(1), aber das funktioniert nicht.
Können Sie bitte klarstellen?
dt=rftmdl[1][Table Box(3)] << kombinierte Datentabelle erstellen("Tbl_Combinied");
sql_statement =
"INSERT INTO SCHEMA.TBL_TABLE " ||
"(Spalte1,Spalte2,Spalte3,Spalte4,Spalte5,Spalte6,Spalte7,Spalte8)" ||
"WERTE(" ||
"'" || Spalte (1) || "', " ||
"'" || Spalte(2)|| "', " ||
"'" || Spalte(3)|| "', " ||
Spalte(4)|| ", " ||
Spalte(5)|| ", " ||
Spalte(6)|| ", " ||
Spalte(7)|| ", " ||
"'" || Spalte (8) || "') ";
dbc = Datenbankverbindung erstellen ("DRIVER={Oracle in instantclient11_1};DBQ=DBNAME;UID=USER;SPWD=PASS;");
// JMP fügt der Insert-Anweisung ein Commit hinzu.
Führen Sie SQL (dbc, sql_statement) aus;
Datenbankverbindung schließen (dbc);
Auch wenn Sie nützliche Links oder JMP-Skriptleitfäden kennen, wird jede Hilfe gerne angenommen.
Danke noch einmal.
Betreff: Ergebnismenge der Datentabelle in vorhandene Oracle-Tabelle schreibenWenn Sie sich in JMP 10 befinden, erfahren Sie hier, wie Sie einen Datensatz einfügen.Beachten Sie, dass DSN_STRING die Verbindungszeichenfolge zu meiner Datenbank ist.Beachten Sie auch, dass der SQL-String in einer durchgehenden Zeile stehen muss, keine Kommentare.
sql_statement =
"INSERT INTO myschema.mytable " ||
"(eine_Spalte, zweite_Spalte, dritte_Spalte) " ||
"WERTE(" ||
"'" || erster_wert || "', " ||
"'" || zweiter_wert || "', " ||
"'" || dritter_wert || "') " ;
dbc = Datenbankverbindung erstellen ( dsn_string ) ;
// JMP fügt der Insert-Anweisung ein Commit hinzu.
Führen Sie SQL aus ( dbc , sql_statement ) ;
Datenbankverbindung schließen ( dbc ) ;
// Verwenden Sie in JMP 8 oder 9 einfach Folgendes:
// Datenbank öffnen (dsn_string, sql_statement);