PL SQL

Συζητήσεις για γλώσσες προγραμματισμού και θέματα σχετικά με προγραμματισμό.
User avatar
rapadder
Gbyte level
Gbyte level
Posts: 1896
Joined: Thu Jun 17, 2004 7:12 pm
Academic status: Alumnus/a
Gender:
Contact:

PL SQL

Postby rapadder » Wed Feb 27, 2008 12:14 am

Έχω έναν πίνακα 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.
... αντάρτες της πορδής με τα λεφτά του μπαμπά...
User avatar
cyberpython
Mbyte level
Mbyte level
Posts: 654
Joined: Wed Nov 21, 2007 8:18 pm
Academic status: Alumnus/a
Gender:
Location: Αθηνα
Contact:

Re: PL SQL

Postby cyberpython » Wed Feb 27, 2008 1:50 pm

Δοκίμασε κάτι σαν :

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
User avatar
rapadder
Gbyte level
Gbyte level
Posts: 1896
Joined: Thu Jun 17, 2004 7:12 pm
Academic status: Alumnus/a
Gender:
Contact:

Re: PL SQL

Postby rapadder » Wed Feb 27, 2008 3:57 pm

Αυτό που γράφεις λειτουργεί αλλά μόνο για μια εγγραφή. Εγώ θα ήθελα με ένα 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 της πολλαπλής εισαγωγής εγγραφών.
... αντάρτες της πορδής με τα λεφτά του μπαμπά...
User avatar
cyberpython
Mbyte level
Mbyte level
Posts: 654
Joined: Wed Nov 21, 2007 8:18 pm
Academic status: Alumnus/a
Gender:
Location: Αθηνα
Contact:

Re: PL SQL

Postby cyberpython » Wed Feb 27, 2008 5:23 pm

Δοκίμασε αν θέλεις να βγάλεις τα ερωτηματικά (από ότι βρήκα στο 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;
User avatar
rapadder
Gbyte level
Gbyte level
Posts: 1896
Joined: Thu Jun 17, 2004 7:12 pm
Academic status: Alumnus/a
Gender:
Contact:

Re: PL SQL

Postby rapadder » Wed Feb 27, 2008 9:38 pm

Δυστυχώς ούτε αυτό παίζει. Τα παρατάω, MySQL και πάλι MySQL.
... αντάρτες της πορδής με τα λεφτά του μπαμπά...
User avatar
PaP
Venus Project Founder
Venus Project Founder
Posts: 1077
Joined: Wed Apr 21, 2004 12:06 am
Academic status: Alumnus/a
Location: San Francisco
Contact:

Re: PL SQL

Postby PaP » Thu Feb 28, 2008 3:40 pm

Πάντα MySQL!
User avatar
rapadder
Gbyte level
Gbyte level
Posts: 1896
Joined: Thu Jun 17, 2004 7:12 pm
Academic status: Alumnus/a
Gender:
Contact:

Re: PL SQL

Postby rapadder » Thu Feb 28, 2008 10:31 pm

Λοιπόν, το μυστήριο λύθηκε και είναι χαζά απλό, όπως συμβαίνει σε αυτές τις περιπτώσεις. Η 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');
... αντάρτες της πορδής με τα λεφτά του μπαμπά...
User avatar
lumenintervalum
Wow! Terabyte level
Wow! Terabyte level
Posts: 2377
Joined: Thu May 06, 2004 7:06 pm
Location: somewhere far beyond..
Contact:

Re: PL SQL

Postby lumenintervalum » Fri May 23, 2008 6:10 pm

Μπορείς να χρησιμοποιήσεις έναν άλλο client για oracle που να σου κάνει τη δουλειά που θες. Δες τα toad, sql navigator κ επίσης sql developer. Είναι λίγο ταλαιπωρία για κάθε batch από statements που απλά θες να τρέξεις να πρέπει να φτιάξεις κι από ένα script.
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

Return to “Προγραμματισμός”

Who is online

Users browsing this forum: No registered users and 15 guests