Domande di base utilizzando Oracle SQL e JSLAttualmente sto facendo alcuni test per vedere come JMP 13 e Oracle (12c) possono lavorare insieme. Il mio obiettivo finale è importare i dati Oracle utilizzando query SQL in JMP, eseguire analisi sui dati e quindi restituire i dati al database Oracle eliminando la tabella originale. Sono stato in grado di portare correttamente i dati in JMP, ma ho problemi con il salvataggio della tabella dei dati in Oracle. Ecco cosa ho finora e cosa penso dovrebbe essere il comando drop the table (attualmente commentato):
constring = ("DSN=***; UID=****; PWD=****);
dt1 = Open Database(constring,"select * from test1","test1");
dt1 << salva database(constring,"test2");
//apri database (constring,"Drop table test1");
Quando eseguo questo, la tabella "test1" si apre con i dati corretti al suo interno, ma il "salvataggio del database" si interrompe con il seguente errore:
Invia prevede un oggetto con script in accesso o valutazione di 'Send' , dt1 << /*####*/save database( constring, "test2" ) /*####*/
Nello script seguente, errore contrassegnato da /*###*/
dt1 << /*####*/save database( constring, "test2" ) /*####*/
{}
Ho usato questo documento ( https://www.jmp.com/content/dam/jmp/documents/en/white-papers/wp-jmp-odbc-102427.pdf ) come riferimento principale e penso che assomigli all'esempio, ma qualcosa non va chiaramente.
Cosa sto facendo di sbagliato con la funzione "salva database" e il comando drop table funzionerà?
Ri: domande di base utilizzando Oracle SQL e JSLOK, ecco un codice che ho messo insieme da un sistema di produzione. I nomi sono stati cambiati per proteggere gli innocenti e tutto il resto.
dt = New Table( "Example", Add Rows( 3 ),
New Column( "ID", Numeric, "Continuous", Format( "Best", 12 ),
Set Values( [1, 2, 3] ) ),
New Column( "Zip Code", Numeric, "Continuous", Format( "Best", 12 ),
Set Values( [12345, 19117, 10111] ) ),
New Column( "Order Amount", Numeric, "Continuous", Format( "Currency", "USD", 17, 2 ),
Set Values( [56.25, 34.11, 14.72] ) )
);
// Come up with a unique temporary table name
unique_table_name = "TMP_" || right(char(today()), 5) || "_" ||
substitute(left(char(tick seconds()), 9), ".", "_");
dbc = create database connection(<INSERT your="" parameters="" here="">);
max_inserts = 200;
nr = nrows(dt);
// Use a series of INSERT ALL INTO statements, which have good performance
sql_statement = evalinsert(
"CREATE TABLE ^unique_table_name^ (
id NUMBER,
zipcode NUMBER,
ORDER_AMOUNT NUMBER)");
//show(sql_statement);
execute sql(dbc, sql_statement);
sql_statement = "INSERT ALL ";
for (i = 1, i <= nr, i++,
one_id = dt:id[i];
one_zip = dt:zip code[i];
one_amt = dt:Order Amount[i];
sql_statement = sql_statement || evalinsert(
" INTO ^unique_table_name^ (ID, ZIPCODE, ORDER_AMOUNT)
VALUES(^one_id^, ^one_zip^, ^one_amt^) ");
if (mod(i, max_inserts) == 0,
// Weird - INSERT ALL INTO requires a SELECT statement at the end - use a dummy one
sql_statement = sql_statement || " SELECT 1 FROM DUAL";
// show(sql_statement);
execute sql(dbc, sql_statement);
sql_statement = "INSERT ALL ";
);
);
// See if there's anything left to do
if (sql_statement != "INSERT ALL ",
sql_statement = sql_statement || " SELECT 1 FROM DUAL";
// show(sql_statement);
execute sql(dbc, sql_statement);
);
close database connection(dbc);
</INSERT>
Ri: domande di base utilizzando Oracle SQL e JSLUhm, interessante. Posso effettivamente creare le tabelle accedendo a Oracle, ma mi piacerebbe farlo funzionare e il DBA non è stato estremamente utile finora. Se provo solo a inserire i record, come posso impostarlo per scorrere i record della tabella JMP per inserirli? Ad esempio, supponiamo di avere una tabella in JMP con 100 record e 3 colonne (ID, codice postale, importo dell'ordine). Come faccio a prendere ciò che hai appena scritto e reinserire quei record nella tabella in Oracle?
Ri: domande di base utilizzando Oracle SQL e JSLSono necessarie le autorizzazioni appropriate per poter creare tabelle in quel particolare schema. Se ciò non è possibile, forse questo approccio funzionerebbe:
Chiedi al tuo DBA di creare la seconda tabella e di darti lettura, scrittura, cancellazione dei privilegi su di essa.
Utilizzo ELIMINA DA rimuovere record, AGGIORNAMENTO per modificare i record esistenti, o INSERIRE per aggiungere nuovi record.
Se stai facendo molti INSERTI che possono essere piuttosto lenti. Mi sono imbattuto in INSERT ALL che può accelerare notevolmente il processo. Ho suddiviso un gran numero di inserti in 200 inserti per blocco e ho visto grandi diminuzioni nel tempo. Ecco un esempio. Nota che hai bisogno di "SELECT * FROM DUAL" alla fine per qualche motivo.
INSERT ALL
INTO mytable (column1, column2, column_n) VALUES (expr1, expr2, expr_n)
INTO mytable (column1, column2, column_n) VALUES (expr1, expr2, expr_n)
INTO mytable (column1, column2, column_n) VALUES (expr1, expr2, expr_n)
SELECT * FROM dual;
Ri: domande di base utilizzando Oracle SQL e JSLGrazie per le informazioni e aiuto a tutti. Sembra che dovrò parlare con il mio DBA e vedere se c'è qualche opzione che mi darà accesso in scrittura tramite la mia connessione ODBC. Grazie ancora!
Ri: domande di base utilizzando Oracle SQL e JSLIn realtà è molto comune poter solo interrogare il database, ma non modificarne il contenuto.
Ri: domande di base utilizzando Oracle SQL e JSLPurtroppo non ha funzionato. Ho creato le tabelle che sto cercando di fare riferimento nel mio schema. È possibile che la connessione ODBC possa avere accesso selezionato, ma non accesso in scrittura? (Scusa se non ho molta familiarità con il funzionamento effettivo della connessione ODBC.)
Ri: domande di base utilizzando Oracle SQL e JSLPotresti provare a inserire un'istruzione Wait(0) dopo Open Database:
dt1 = Open Database(...);
Wait(0);
dt1 << Save Database(...);
Ho i miei dubbi che questo aiuterà, perché lo spettacolo (dt1) mostra che sa che è una tabella di dati.
Se apri semplicemente una tabella di dati di esempio, ad esempio Grande Classe , in modo interattivo e poi, dallo script, fai:
Current Data Table() << Save Database(...);
Funziona? Ciò stabilirebbe che hai il permesso di scrittura.
Eric
Ri: domande di base utilizzando Oracle SQL e JSLOps, in qualche modo l'ho perso sopra. L'hai fatto. Sei sicuro di avere i privilegi di scrittura su questo database?Ri: domande di base utilizzando Oracle SQL e JSLHai specificato il nome dello schema con il nome della tabella da salvare? Un esempio:
dt << Salva Database("DSN=MyConnectionInfo", "SchemaName.BigClass");
Brian Corcoran
Sviluppo JMP
Ri: domande di base utilizzando Oracle SQL e JSLL'ho cambiato un po', cercando di mettere i puntini sulle i e incrociare le t. Ecco il mio codice jsl e l'output del log:
Codice JSL
constring = ("DSN=***; UID=***; PWD=***");
dt1 = Apri Database(constring,"SELECT * FROM UID.TEST", "TEST1");
mostra(dt1);
dt1 << salva database(constring,"UID.TEST1");
Uscita del registro:
Informazioni sulla connessione al database:
DSN=***; UID=***;
dt1 = TabellaDati("TEST1");
Informazioni sulla connessione al database:
DSN=***; UID=***;
Scriptabile[]
Niente è troppo piccolo a questo punto, se qualcosa sembra strano fammelo sapere. Altrimenti, se riesci a eseguirlo, sono bloccato a chiedermi se in qualche modo è il mio ODBC.
Ri: domande di base utilizzando Oracle SQL e JSLEhi, bestia,
Bene, sono perplesso, perché ho imitato esattamente il tuo script su JMP 13 con Oracle e ha funzionato bene, inclusa la DROP TABLE:
connstr = "DSN=Oracle Striper Replacement;UID=***;PWD=***;DBQ=EXADAT12C ;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;BTD=F;BNF=F;BAM=IfAllSuccessful;NUM=NLS;DPM=F;MTS=T;MDI=F;CSR=F;FWC=F;FBS=64000;TLO=O;MLD=0;ODA=F;";
dt1 = Open Database(
connstr,
"SELECT * FROM \!"SQBTEST\!".\!"BigTest3\!"",
);
dt1 << Save Database(connstr, "SQBTEST.BigTest4");
Open Database(
connstr,
"DROP TABLE \!"SQBTEST\!".\!"BigTest3\!""
);
L'unica volta che ho ricevuto il messaggio "Invia si aspetta un oggetto scriptabile" è stata una volta in cui avevo il nome di tabella sbagliato nella funzione Apri database e quindi l'apertura non è riuscita.
Forse lancia un:
show(dt1);
tra le chiamate Apri database e Salva database e assicurati che dt1 sia corretto. Dovrebbe essere simile a questo nel registro JMP:
dt1 = DataTable("SQL Results 3");
HTH,
Eric