Avatar billede mikkelfunck Nybegynder
05. april 2001 - 14:11 Der er 5 kommentarer og
1 løsning

Stored Procedure

Nå, joern_h, du plejer at være god for et svar til mine spørgsmål ;-) Lad os se om ikke du har er svar her osse. Andre må selvfølgelig også gerne være med :-)

CREATE OR REPLACE procedure insertLibrary(
libid OUT NUMBER,
libtitel IN VARCHAR2,
libtype IN VARCHAR2,
libdate IN DATE,
libmeta IN VARCHAR2,
libproddate IN DATE,
libcontact IN VARCHAR2,
libdepartment IN VARCHAR2,
liblink IN VARCHAR2,
libhandle IN VARCHAR2)
is
  CURSOR cs_get_id IS
  SELECT seq_library.NEXTVAL
  FROM dual;
begin
  OPEN cs_get_id;
  FETCH cs_get_id INTO libid;
  CLOSE cs_get_id;

  INSERT INTO library VALUES (
  libid,
  libtitel,
  libtype,
  libdate,
  libmeta,
  libproddate,
  libcontact,
  libdepartment,
  liblink,
  libhandle);
end insertLibrary;

LINE/COL ERROR
-------- --------------------------------------
21/3    PL/SQL: SQL Statement ignored
24/3    PLS-00382: expression is of wrong type

Hvorfor nu det ?
Avatar billede mikkelfunck Nybegynder
05. april 2001 - 14:17 #1
Linie 21 er INSERT INTO...
Avatar billede mej Nybegynder
06. april 2001 - 09:45 #2
Hej Mikkel

Jeg mangler lidt at se pointen i det du gør her..
Skal denne procedure kun bruges til at indsætte den næste nummer fra din sequence i LIBID?
Eller vil du oprette en ny række i tabellen med de i forvejen eksisterende værdier og blot opdatere LIBID?

Når du bruger sekvenser så kan du både i INSERT og UPDATE gøre således:
INSERT INTO library(libid) values (seq_library.NEXTVAL);
eller
UPDATE library set LIBID = seq_library.NEXTVAL
where .... (hvad kriterie din update nu skal have). Du behøver altså ikke at hente nextval fra dual.
Når du laver dine IN og OUT parametre så
skriv
CREATE OR REPLACE procedure insertLibrary(
libid_out OUT library.libid%type,
libtitel_in IN library.libtitel%type,
libtype_in IN library.libtype%type,
libdate_in IN library.libdate%type,
libmeta_in IN library.libmeta%type,
libproddate_in IN library.libproddate%type,
libcontact_in IN library.libcontact%type,
libdepartment_in IN library.libdepartment%type,
liblink_in IN library.liblink%type,
libhandle_in IN library.libhandle%type)

Pas på med at kalde dine parametre fuldstændig det samme som kolonnerne det er forvirrende.
Ved at definere dine parametre med %type så er du sikker på at de får den rigtige datatype.

Umiddelbart så mangler jeg at vide hvad du vil med proceduren få at kunne komme med et alternativ eller en rettelse, så dette er kun et par pointers til hvordan de ting du har gjort kan gøres anderledes. Og hvordan ser tabellen du arbejder på ud?
Avatar billede mikkelfunck Nybegynder
06. april 2001 - 13:01 #3
hej mej

OK- finten er at jeg sidder og arbejder videre på nogle eksisterende Procedures der alle er lavet sådan her. Jeg er ikke den store ekspert i det selv... Det handler om er, at jeg har en tabel med de kolonner der er defineret i starten fra libid - libhandle. Det proceduren skal, er at oprette en ny row og med alle kolonner og indsætte de variable i felterne, som jeg får fra et webinterface. Selve sekvensen, som jeg forstår det, skal lave en auto increment til libid i den nye row. Det jeg ikke forstår er sådan set bare at det virker fint på denne måde, på alt andet der er lavet - men ikke med denne her...
Avatar billede mikkelfunck Nybegynder
06. april 2001 - 13:14 #4
Jeg mangler at understrege at de tabeller og procedures der er laver før er identiske, ned til mindste detalje, med det her. På nær kolonnenavne...
Avatar billede mikkelfunck Nybegynder
06. april 2001 - 13:20 #5
Ja, nu virker det...
Det hjalp at bruge %type.

Det var fedt! Jeg er jo igang med \'learning by doing\' her, så det er små skridt...

Takker
Avatar billede mej Nybegynder
06. april 2001 - 14:01 #6
Hej Mikkel..

Så havde du nok bare fået sat en forkert datatype på en af dine IN el. OUT i forhold til Library tabellen... Og så er det snedige med %type jo netop at du ikke behøver at tænke på hvilken datatype de eksisterende kolonner er for det finder proceduren selv ud af.
Godt at det virker nu.
God weekend.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester