Page 1 of 1

PL SQL

Posted: Wed Feb 27, 2008 12:14 am
by rapadder
Έχω έναν πίνακα fodors:

Create table fodors (name VARCHAR(50), addr VARCHAR(70),
city VARCHAR(20), phone VARCHAR(30), type VARCHAR(30));

Στην MySQL μπορείς να βάλεις στοιχεία στον πίνακα με την παρακάτω εντολή:

INSERT INTO fodors VALUES
('Adriano''s Ristorante', '2930 Beverly Glen Circle', 'Los Angeles', '310/475-9807', 'Italian'),
('Arnie Morton''s of Chicago', '435 S. La Cienega Blvd.', 'Los Angeles', '310/246-1501', 'American'),
('Art''s Delicatessen', '12224 Ventura Blvd.', 'Studio City', '818/762-1221', 'American');

Στον Microsoft SQL Server (T/SQL) αυτό δεν γίνεται όπως παραπάνω και το αντίστοιχο sql query είναι:

INSERT INTO fodors
SELECT 'Adriano''s Ristorante', '2930 Beverly Glen Circle', 'Los Angeles', '310/475-9807', 'Italian'
UNION ALL
SELECT 'Arnie Morton''s of Chicago', '435 S. La Cienega Blvd.', 'Los Angeles', '310/246-1501', 'American'
UNION ALL
SELECT 'Art''s Delicatessen', '12224 Ventura Blvd.', 'Studio City', '818/762-1221', 'American';

Η ερώτηση είναι πώς μπορώ να κάνω αυτό το query σην PL/SQL (Oracle); Δοκίμασα διάφορα και δεν δουλεύουν. Μάλιστα δεν δουλεύει ούτε το παρακάτω (πάρα μόνο αν τα query εκτελεστούν ξεχωριστά):

INSERT INTO fodors VALUES
('Adriano''s Ristorante', '2930 Beverly Glen Circle', 'Los Angeles', '310/475-9807', 'Italian');
INSERT INTO fodors VALUES
('Arnie Morton''s of Chicago', '435 S. La Cienega Blvd.', 'Los Angeles', '310/246-1501', 'American');

Χρησιμοποιώ τον Oracle Database 10g Express Edition.

Re: PL SQL

Posted: Wed Feb 27, 2008 1:50 pm
by cyberpython
Δοκίμασε κάτι σαν :

INSERT INTO fodors
(name, addr, city, phone, type)
VALUES
('Adriano''s Ristorante', '2930 Beverly Glen Circle', 'Los Angeles', '310/475-9807', 'Italian');

COMMIT;

Δες εδώ για περισσότερα : http://www.psoug.org/reference/insert.html

Re: PL SQL

Posted: Wed Feb 27, 2008 3:57 pm
by rapadder
Αυτό που γράφεις λειτουργεί αλλά μόνο για μια εγγραφή. Εγώ θα ήθελα με ένα query να εισάγω πολλές εγγραφές στον πίνακα. Από το link που παρέθεσες, υπάρχει το παρακάτω παράδειγμα (στήλη Demo Tables στην ενότητα INSERT WHEN):

CREATE TABLE emp (
empno NUMBER(4) NOT NULL,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
sal NUMBER(7,2),
deptno NUMBER(2));

και στη συνέχεια κάνει αυτό ακριβώς που θέλω, δηλαδή εισάγει πολλές εγγραφές με ένα sql query:

INSERT INTO emp VALUES
(7369, 'SMITH', 'CLERK', 7902, 800, 20);
...
INSERT INTO EMP VALUES
(7499, 'ALLEN', 'SALESMAN', 7698, 1600, 30);
INSERT INTO EMP VALUES
(7934, 'MILLER', 'CLERK', 7782, 1300, 10);
COMMIT;

Στην Database Express Edition βγάζει το λάθος: ORA-00911: invalid character αν πάς να εκτελέσεις το query της πολλαπλής εισαγωγής εγγραφών.

Re: PL SQL

Posted: Wed Feb 27, 2008 5:23 pm
by cyberpython
Δοκίμασε αν θέλεις να βγάλεις τα ερωτηματικά (από ότι βρήκα στο google μ' αυτό σχετιζόταν το πρόβλημα τις περισσότερες φορές).

Δε βλέπω σημαντική διαφορά ανάμεσα στο παραπάνω και σε αυτό (ίσως βέβαια να κάνω λάθος....) :

INSERT INTO fodors
(name, addr, city, phone, type)
VALUES
('Adriano''s Ristorante', '2930 Beverly Glen Circle', 'Los Angeles', '310/475-9807', 'Italian');

INSERT INTO fodors
(name, addr, city, phone, type)
VALUES
('Arnie Morton''s of Chicago', '435 S. La Cienega Blvd.', 'Los Angeles', '310/246-1501', 'American');

INSERT INTO fodors
(name, addr, city, phone, type)
VALUES
('Art''s Delicatessen', '12224 Ventura Blvd.', 'Studio City', '818/762-1221', 'American');

COMMIT;

Re: PL SQL

Posted: Wed Feb 27, 2008 9:38 pm
by rapadder
Δυστυχώς ούτε αυτό παίζει. Τα παρατάω, MySQL και πάλι MySQL.

Re: PL SQL

Posted: Thu Feb 28, 2008 3:40 pm
by PaP
Πάντα MySQL!

Re: PL SQL

Posted: Thu Feb 28, 2008 10:31 pm
by rapadder
Λοιπόν, το μυστήριο λύθηκε και είναι χαζά απλό, όπως συμβαίνει σε αυτές τις περιπτώσεις. Η Oracle Database 10g Express Edition έχει τα παρακάτω εικονίδια:

Image

Πατώντας στο εικονίδιο SQL Commands, σου ανοίγει μια σελίδα με ένα πεδίο στο οποίο γράφεις την εντολή και πατάς στο κουμπί Run. Το θέμα είναι ότι μπορείς να εκτελείς μόνο μια εντολή κάθε φορά:
Enter SQL statement or PL/SQL command and click Run to see the results.
Αν θέλεις να εκτελείς περισσότερες εντολές ταυτόχρονα πρέπει να επιλέξεις το εικονίδιο SQL scripts και στη συνέχεια να κάνεις upload το script που θα δημιουργήσεις.
Επηρεασμένος τόσο από τον MS SQL Server όσο και από την command line της MySQL, δεν πήγε το μυαλό μου εκεί παρότι το σχόλιο θα έπρεπε να με διαφωτίσει νωρίτερα. Για την ιστορία, το σωστό query είναι:

INSERT INTO fodors VALUES
('Adriano''s Ristorante', '2930 Beverly Glen Circle', 'Los Angeles', '310/475-9807', 'Italian');
INSERT INTO fodors VALUES
('Arnie Morton''s of Chicago', '435 S. La Cienega Blvd.', 'Los Angeles', '310/246-1501', 'American');

Re: PL SQL

Posted: Fri May 23, 2008 6:10 pm
by lumenintervalum
Μπορείς να χρησιμοποιήσεις έναν άλλο client για oracle που να σου κάνει τη δουλειά που θες. Δες τα toad, sql navigator κ επίσης sql developer. Είναι λίγο ταλαιπωρία για κάθε batch από statements που απλά θες να τρέξεις να πρέπει να φτιάξεις κι από ένα script.
PS. Μερικές φορές δεν επιλέγεις εσύ τη βάση πάνω στην οποία θα παίξεις...