sql >> Databasteknik >  >> RDS >> Oracle

Kan en oracle SQL-fråga exekvera en strängfråga vald från en tabell?

Generellt sett är detta inte en särskilt bra design - att lagra SQL i tabeller och dynamiskt köra den introducerar alla möjliga säkerhets- och underhållsproblem.

Det är förmodligen möjligt (även om det är alldeles för sent på en fredag ​​som började alldeles för tidigt för att jag skulle försöka lista ut det) att göra en riktigt cool XML-fråga i stil med denna fråga som kör en count(*) mot varje tabell i schemat som skulle göra allt i en fråga.

För de allra flesta programmerare skulle dock det enklare tillvägagångssättet vara att gå över frågorna, köra dem en i taget och lagra resultaten någonstans. Potentiellt skulle den lokala variabeln till exempel läggas till en samling av antal.

FOR q IN (SELECT sql_text FROM query_table)
LOOP
  EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM (' || q.sql_text || ')'
     INTO some_local_variable;
  <<do something with the local variable>>
END LOOP;

Eftersom du försöker skapa en vy kan du ta den här logiken och lägga den i en pipelined tabellfunktion. Du skulle göra en PIPE ROW för att returnera data inom loopen. Din vy kan sedan skapas ovanpå funktionen för pipelined tabell.



  1. SQL max() med inre kopplingar

  2. Databasen kan inte öppnas eftersom den är version 782. Denna server stöder version 706 och tidigare. En nedgraderingsväg stöds inte

  3. Förberedd uttalande som står i konflikt med användarvariabler

  4. PHP:Varning:sort() förväntar sig att parameter 1 är array, resurs given