J'essaie de tester une fonction, où je transmets un nom et une date de table en entrée et en obtenant un nombre comme valeur de retour. Je passe juste la date variable de liaison (ne peut pas passer nom_table)Oracle Fonction avec nom_table et date en entrée et Nombre en sortie
CREATE OR REPLACE FUNCTION TABLE_TEST (reptable in varchar2, fltdate in varchar2) RETURN NUMBER
IS
day_exists VARCHAR2(5 CHAR);
BEGIN
execute immediate
'Select CASE WHEN max(day_i) IS NULL THEN ''NO'' ELSE ''YES'' END FROM '|| reptable ||' WHERE 1 IN
(SELECT max(day_i)
FROM '|| reptable ||'
where day_i = 1 and flt_dptr_Date_d = :1)' into day_exists
using fltdate
;
IF day_exists = 'YES' THEN
return 1;
END IF;
END TABLE_TEST;
Voici comment je le tester
Select TABLE_TEST('FDR_REP', '07/25/2015') from dual;
Il fonctionne correctement lorsque je les tester individuellement à-dire quand je passe juste la nom_table ou juste la date. Mais pour une raison quelconque, il montre une erreur pas un mois valide. Je ne crois pas qu'il y ait un problème avec la date.
Cette partie fonctionne quand je passe juste la nom_table
CREATE OR replace FUNCTION TEST_FUNCTION (name_table IN VARCHAR2) RETURN NUMBER
IS
rday NUMBER;
BEGIN
execute immediate 'select day_i
FROM ' || name_table || '
WHERE day_i = 1 and rownum = 1' into rday;
return rday;
END TEST_FUNCTION;
Pourquoi transmettez-vous une valeur de date sous forme de chaîne? –
@WernfriedDomscheit pour le généraliser. – JavaQuest