Avatar billede r.hegaard Nybegynder
27. november 2005 - 20:18 Der er 3 kommentarer og
1 løsning

Problemer med SQL statements i PL/SQL

Jeg vil gerne have analyseret alle mine tabeller ved hjælp af noget PL/SQL kode. Jeg har forsøgt mig med følgende:

declare
  tabName ALL_TABLES.TABLE_NAME%TYPE;
  cursor tablesX is select TABLE_NAME from ALL_TABLES where owner = user;
begin
  open tablesX;
  fetch tablesX into tabName;
  while tablesX%FOUND loop
    ANALYZE TABLE tabName COMPUTE STATISTICS FOR TABLE;
    fetch tablesX into tabName;
  end loop;
end;

Jeg kan desværre ikke få det til at virke, da den giver fejl i linien med ANALYZE. Jeg får fejlen:
    ANALYZE TABLE tabName COMPUTE STATISTICS FOR TABLE;
            *
FEJL i linie 8:
ORA-06550: linje 8, kolonne 13:
PLS-00103: Fandt symbolet "TABLE", hvor en af følgende var forventet:
:= . ( @ % ;

Hvad skal jeg gøre, for at få det til at virke ??
Hvordan skal jeg få indsat værdien for tabName i udtrykket ??
Avatar billede Slettet bruger
27. november 2005 - 21:25 #1
du er nødt til at lave dynamisk SQL.

Prøv at erstatte

ANALYZE TABLE tabName COMPUTE STATISTICS FOR TABLE;

med

execute immediate 'ANALYZE TABLE ' || tabName || ' COMPUTE STATISTICS FOR TABLE';

held og lykke med det.

PS: Bemærk at der IKKE er semikolon ';' efter ...FOR TABLE
Avatar billede Slettet bruger
27. november 2005 - 21:27 #2
men der er også nogen procedurer du kan bruge: DBMS_UTILITY.ANALYZE_SCHEMA(...)
Avatar billede r.hegaard Nybegynder
27. november 2005 - 21:50 #3
Mange tak for hjælpen.
Kan du hjælpe med et lille lignende problem:
Jeg vil udføre "select count(*) into numRows from tabName;"
tabName er samme variable som før.

Det virker ikke med:
execute immediate 'select count(*) into numRows from ' || tabName;

Hvad gør jeg forkert her ??
Avatar billede r.hegaard Nybegynder
27. november 2005 - 22:42 #4
Jeg har fået det til at virke.
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