Gå til innhold

Hente en rad fra en database


Anbefalte innlegg

Heisann.

 

Begynner såvidt å jobbe litt med perl. Et enkelt spørsmål da, er å bruke pakken(?) DBI, hvordan får jeg da til å hente ut et enkel row.

 

Har altså en select fildi from tabell_filer where filnavn ='PER' Denne skal returnere en rad, med en filid.

 

Hvordan gjør jeg dette i Perl? Jeg bruker Oracle database.

Lenke til kommentar
Videoannonse
Annonse

Tror ikke det har så mye å si om det er oracle eller mysql. Er helt blank og trenger bare å vite hvordan man får ut en rad fra en database. Jeg har en connection til en database...

 

Men mer hvordan få en variabel fra sql til en variabel i Perl...tror kanskje jeg har løst det med dette:


my $sql_statement = "SELECT max(FILID) FROM VALREG_DATAINN_FILER WHERE FILNAVN = '$filnavn'";    # Prepare and execute SELECT
  my($cursor);

  unless ($cursor = $DBH->prepare("$sql_statement")) 
  { 
&log_feil ("Kan ikke utføre $sql_statement $DBI::errstr\n"); 
  } 
  unless ($cursor->execute) 
  { 
     &log_feil ("Kan ikke utføre $sql_statement $DBI::errstr\n"); 
  } 
  
  $filid = $cursor->fetchrow_array;
  return $filid;

 

Spesielt de to siste linjene er jeg usikker på om er korrekt?

Lenke til kommentar

Hei, det ser ut som det burde kanskje muligens fungere dersom du har en vellykket forbindelse til databasen. Likte ikke helt de unless-sløyfene. Virker som du forventer at det ikke skal lykkes, hehe om du skjønner. Bruk en "if(...code...) or die("bla bla"); istedenfor.

 

 

$filid = $cursor->fetchrow_array;

returnerer en array-ref ($filid) som inneholder en rad med resultat fra spørring. Loop helt til den returnerer false for å lese alle rader fra spørring. Foretrekker selv å bruke fetchrow_hashref(). Vi slipper da å huske på hvilke felter som er hvor i arrayref siden vi får en hashref tilbake.e.g.:

while ( my $hashref = $sth->fetchrow_hashref() ) {
   #Leser ut Title kolonne fra spørring (dvs en rad)
   print "\nTitle", "$hashref->{'Title'}";
}

Lenke til kommentar
Heisann.

 

Begynner såvidt å jobbe litt med perl.  Et enkelt spørsmål da, er å bruke pakken(?) DBI, hvordan får jeg da til å hente ut et enkel row.

 

Har altså en select fildi from tabell_filer where filnavn ='PER' Denne skal returnere en rad, med en filid.

 

Hvordan gjør jeg dette i Perl? Jeg bruker Oracle database.

5484605[/snapback]

 

Følgende skulle virke så lenge du har modulene DBI og DBD-Oracle (bytt ut foo.bar.com, username og password så de passer ditt system):

 

use DBI;

$dbh = DBI->connect('dbi:Oracle:host=foo.bar.com;sid=ORCL;port=1521', 'username', 'password', { RaiseError => 1, AutoCommit => 1});

@row = $dbh->selectrow_array("select filid from tabell_filer where filnavn ='PER'");

print $row[0];

$dbh->disconnect( );

 

Hvis du ikke har disse modulene må de installeres. Hvis du bruker ActiveState Perl, kan du kjøre ppm.exe fra kommandolinja og installere modulene med 'install DBI' og 'install DBD-Oracle'. ppm.exe er noe som er spesifikt for ActiveState Perl, som gjør installering av moduler mye enklere enn på den 'tradisjonelle' måten.

 

Hvis du ikke har ActiveState, men kjører Oracle sin Perl, må du installere modulene på gamlemåten.

 

Skriv

 

perl -MCPAN -e shell

 

Hvis du ikke har kjørt denne før, blir du spurt om en bråte med spørsmål. De fleste kan du bare trykk enter på.

 

Til slutt kan du installere modulene ved å skrive 'install DBI' og 'install DBD-Oracle'.

 

PS! Jeg har ikke prøvd dette via Oracle sin Perl, så jeg vet ikke om det fungerer. Jeg anbefaler deg å kjøre ActiveState Perl som du kan hente ned på www.activestate.com. Men før du installerer den, må du rename perl-katalogen i oracle-filstrukturen til perl_bak. Ellers får du konflikter.

 

---

Werner

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...