sql >> Database teknologi >  >> RDS >> Oracle

pl/sql-funktion kaldet, hvor mange gange?

Dette er den slags situation, hvor nogle eksperimenter er nyttige (dette blev udført på 10g). Ved at bruge følgende forespørgsel kan vi se, at normale funktioner, der bruger de samme parametre (i dette tilfælde ingen), vil blive udført, hver gang de kaldes:

select dbms_random.value() from all_tables

Dette skyldes, at Oracle antager, at en funktion ikke vil returnere den samme værdi konsekvent, medmindre du fortæller det andet. Det kan vi gøre ved at oprette en funktion ved hjælp af deterministic søgeord:

CREATE FUNCTION rand_det
   RETURN NUMBER
   DETERMINISTIC AS
BEGIN
   RETURN DBMS_RANDOM.VALUE ();
END;

Brug af denne funktion i stedet for dbms_random i den første forespørgsel fortæller os, at forespørgslen kun udføres én gang på trods af de mange opkald. Men dette tydeliggør kun select afsnit. Hvad hvis vi bruger den samme deterministiske funktion i både en select og en where klausul. Vi kan teste det ved at bruge følgende forespørgsel:

SELECT rand_det
FROM   all_tables
WHERE  rand_det > .5;

Du skal muligvis køre dette flere gange for at se vores bevis, men til sidst vil du se en liste med værdier på mindre end 0,5. Dette giver os bevis for, at selv den deterministiske funktion udføres to gange:én gang for hver sektion, den vises i. Som et alternativ kan du ændre vores deterministiske funktion som følger og derefter køre den efterfølgende forespørgsel, som vil afsløre 2 linjer skrevet til DBMS_OUTPUT .

CREATE OR REPLACE FUNCTION rand_det
   RETURN NUMBER
   DETERMINISTIC AS
BEGIN
   DBMS_OUTPUT.put_line ('Called!');
   RETURN DBMS_RANDOM.VALUE ();
END;

SELECT rand_det
FROM   all_tables;


  1. hvordan man forbinder tomcat 7 og mysql

  2. SQL for lang til String

  3. SQL multiple inserts med Python

  4. Efterfølger mange til mange spørgsmål