Toon posts:

[PL/SQL] Variabele tabelnaam in query*

Pagina: 1
Acties:
  • 144 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb momenteel pl/sql blok geschreven waarin een functie word opgeroepen die het aantal records in een opgegeven tabel telt. Nu wou ik deze oef maken zodat ik deze functie kon oproepen voor eender welke tabel (tabel naam word doorgegeven met de functie).

maar in men functie krijg ik de error dat deze tabelnaam niet bestaat. weet iemand soms een oplossing.

Functie
-----------

SQL:
1
2
3
4
5
6
7
8
9
10
11
CREATE OR REPLACE FUNCTION aantal_tabelnaam
(f_tabelnaam        IN  varchar2)
RETURN number
IS
v_aantal_cnt number(4);

BEGIN
select count(*) into v_aantal_cnt from f_tabelnaam; --> hier zit dus et probleem
return(v_aantal_cnt);
END;
/


edit:
Ik heb even code-tags toegevoegd. Doe je dat de volgende keer zelf? :)

[ Voor 10% gewijzigd door NMe op 26-10-2005 23:07 . Reden: [code]-tags toegevoegd. Doe je dat de volgende keer zelf? :) ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Welke waarde bevat f_tabelnaam? Weet je zeker dat die tabel bestaat?

En moet er op regel 6 niet AS staan? Mijn PL/SQL is wat roestig; ik heb het al ruim een jaar niet meer aangeraakt, maar daar staat me iets van bij. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
in f_tabelnaam komt de naam van een tabel te staan (die meegegeven wordt via een parameter).

als ik een gewoon de naam van de tabel zet ipv de variabele dan werkt de functie wel.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Laat je aanroep van die functie eens zien? :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
9
DECLARE
    v_aantal                     number(4);
    v_tabelnaam          varchar2(20);
BEGIN
    v_tabelnaam:=&tabelingave;
    v_aantal:=aantal_tabelnaam(v_tabelnaam);
    dbms_output.put_line (v_aantal);
END;
/

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Ik vrees dat dat niet zomaar gaat. Dit wordt een dynamic query, probeer in sql+ maar eens
SELECT * FROM 'EENWILLEKEURIGETABELNAAM' in te geven. (let op de quotes)

Misschien zijn er andere mogelijkheden, ik ben geen enorme pl/sql goeroe, (ff indekken, heb vandaag met mn manager gesproken en dat doet toch wat met je :P )

[ Voor 6% gewijzigd door bigbeng op 26-10-2005 23:50 ]


Verwijderd

declare
v_sql varchar2(100);
v_aantal number;
v_tabel varchar(10);
begin
v_tabel := 'emp'; -- dit moet een willekeurige naam van een tabel zijn.
v_sql := 'select count(*) from' || ' ' || v_tabel; -- hier bouw je de sql statement op
execute immediate v_sql into v_aantal; -- hier voer je de statement
dbms_output.put_line(v_aantal);
end;

Verwijderd

Topicstarter
Bedankt excbr, het werkt

Greetz
Pagina: 1