RomyWinfo Geschrieben 23. Januar 2009 Geschrieben 23. Januar 2009 Frage: Schreiben Sie eine stored procedure, die bei Eingabe eines Tabellennamens die Anzahl der Sätze, die aktuell in dieser Tabelle sich befinden, ausgibt. Kann man das so machen? CREATE PROCEDURE table_count ( in_table_name IN VARCHAR2, out_anzahl OUT NUMBER ) AS v_tablename VARCHAR2 := in_table_name; BEGIN SELECT COUNT (*) INTO out_anzahl FROM v_tablename; END; EXCEPTION WHEN NO_DATA_FOUND THEN out_anzahl:=0; END; EXCEPTION WHEN OTHERS THEN RAISE_APPLICATION_ERROR(-20010,’proc’||’table_count: ‘|| substr(SQLERRM,1,80)); END; Danke vorab!
dr.dimitri Geschrieben 23. Januar 2009 Geschrieben 23. Januar 2009 Hi, nicht ganz. Zuerst müsste man wissen wohin das Ergebnis ausgegeben werden soll. Bei einem SELECT count() wird nie eine NO_DATA_FOUND Exception gefunden. Bei 0 Sätzen wird einfach 0 geliefert. Den entsprechenden Exceptionteil kannst also weglassen. Dann kann man kein statisches SQL machen, bei dem der tabellenname nicht fest ist. Hier braucht man dynamisches SQL: EXECUTE IMMEDIATE' select count(*) from '||in_table_name INTO out_anzahl; Weswegen scheidest Du denn die Fehlermeldung auf 80 Zeichen ab? Dim
RomyWinfo Geschrieben 23. Januar 2009 Autor Geschrieben 23. Januar 2009 Danke für die Antwort, mein Problem ich kenne mich mit stored procedures gar nicht aus... kann ich dann den AS Teil ganz weglassen? CREATE PROCEDURE table_count ( in_table_name IN VARCHAR2, out_anzahl OUT NUMBER ) AS v_tablename VARCHAR2 := in_table_name; BEGIN EXECUTE IMMEDIATE' select count(*) from '||in_table_name INTO out_anzahl; END; EXCEPTION WHEN OTHERS THEN RAISE_APPLICATION_ERROR(-20010,’proc’||’table_count: ‘|| substr(SQLERRM,1,80)); END; Danke schon mal....
dr.dimitri Geschrieben 23. Januar 2009 Geschrieben 23. Januar 2009 Weglassen? Nein nur ersetzen: CREATE PROCEDURE table_count ( in_table_name IN VARCHAR2, out_anzahl OUT NUMBER) AS BEGIN EXECUTE IMMEDIATE 'select count(*) from '||in_table_name INTO out_anzahl; END; Des weiteren sind das ' und keine Backticks (’) wie du sie verwendet hast. Dim
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden