PL SQL
- rapadder
- Gbyte level
- Posts: 1897
- Joined: Thu Jun 17, 2004 7:12 pm
- Academic status: Alumnus/a
- Gender: ♂
PL SQL
Έχω έναν πίνακα 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.
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.
... Γράφτε κώδικα όσο είναι καιρός ...
- cyberpython
- Mbyte level
- Posts: 654
- Joined: Wed Nov 21, 2007 8:18 pm
- Academic status: Alumnus/a
- Gender: ♂
- Location: Αθηνα
- Contact:
Re: PL SQL
Δοκίμασε κάτι σαν :
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
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
- rapadder
- Gbyte level
- Posts: 1897
- Joined: Thu Jun 17, 2004 7:12 pm
- Academic status: Alumnus/a
- Gender: ♂
Re: PL SQL
Αυτό που γράφεις λειτουργεί αλλά μόνο για μια εγγραφή. Εγώ θα ήθελα με ένα 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 της πολλαπλής εισαγωγής εγγραφών.
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 της πολλαπλής εισαγωγής εγγραφών.
... Γράφτε κώδικα όσο είναι καιρός ...
- cyberpython
- Mbyte level
- Posts: 654
- Joined: Wed Nov 21, 2007 8:18 pm
- Academic status: Alumnus/a
- Gender: ♂
- Location: Αθηνα
- Contact:
Re: PL SQL
Δοκίμασε αν θέλεις να βγάλεις τα ερωτηματικά (από ότι βρήκα στο 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;
Δε βλέπω σημαντική διαφορά ανάμεσα στο παραπάνω και σε αυτό (ίσως βέβαια να κάνω λάθος....) :
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;
- rapadder
- Gbyte level
- Posts: 1897
- Joined: Thu Jun 17, 2004 7:12 pm
- Academic status: Alumnus/a
- Gender: ♂
Re: PL SQL
Δυστυχώς ούτε αυτό παίζει. Τα παρατάω, MySQL και πάλι MySQL.
... Γράφτε κώδικα όσο είναι καιρός ...
- rapadder
- Gbyte level
- Posts: 1897
- Joined: Thu Jun 17, 2004 7:12 pm
- Academic status: Alumnus/a
- Gender: ♂
Re: PL SQL
Λοιπόν, το μυστήριο λύθηκε και είναι χαζά απλό, όπως συμβαίνει σε αυτές τις περιπτώσεις. Η Oracle Database 10g Express Edition έχει τα παρακάτω εικονίδια:

Πατώντας στο εικονίδιο 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');

Πατώντας στο εικονίδιο 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');
... Γράφτε κώδικα όσο είναι καιρός ...
- lumenintervalum
- Wow! Terabyte level
- Posts: 2377
- Joined: Thu May 06, 2004 7:06 pm
- Location: somewhere far beyond..
- Contact:
Re: PL SQL
Μπορείς να χρησιμοποιήσεις έναν άλλο client για oracle που να σου κάνει τη δουλειά που θες. Δες τα toad, sql navigator κ επίσης sql developer. Είναι λίγο ταλαιπωρία για κάθε batch από statements που απλά θες να τρέξεις να πρέπει να φτιάξεις κι από ένα script.
PS. Μερικές φορές δεν επιλέγεις εσύ τη βάση πάνω στην οποία θα παίξεις...
PS. Μερικές φορές δεν επιλέγεις εσύ τη βάση πάνω στην οποία θα παίξεις...
We are just a moment in time
A blink of an eye
A dream for the blind
Visions from a dying brain
I hope you don't understand
_______________________
scraps& photo gallery στο deviantart- last update 25/08/06
A blink of an eye
A dream for the blind
Visions from a dying brain
I hope you don't understand
_______________________
scraps& photo gallery στο deviantart- last update 25/08/06