Anmelden

View Full Version : sql call procedure



Xanas
28-09-09, 07:33
Hallo,

ich habe eine Procdure

create procedure yx (CHAR(10)) ......

so wenn ich die jetzt mit

call procedure yx( '1234567890' )

aufrufe wird die procedure nicht gefunden, weil nach einer procedure mit VARCHAR(10) gesucht wird.

kann ich das SQL beim call zwingen ein CHAR(10) statt VARCHAR(10) zu verwenden?.

So bekomme ich allerdings ein Syntaxfehler, geht das überhaupt?
call procedure yx( CAST( '1234567890' AS CHAR(10))

Gruß
xanas

B.Hauser
28-09-09, 08:11
Bei Stored Procedures liegt es nicht daran, ob CHAR oder VARCHAR-Parameter übergeben wurden, da lediglich die Anzahl der Parameter und allenfalls auf Compatibilität der Parameter geprüft wird. Deshalb ist ein Casting der Parameter nicht zulässig. (Bei User Defined Functions spielt der Parameter-Typ eine Rolle, da hier anders überladen wird. Beim Aufruf von UDFs ist die Angabe von CAST und anderen Konvertierungs-Funktionen wie CHAR zulässig).

M.E. stimmt entweder die Bibliotheksliste nicht, wenn Du mit System-Naming arbeitest oder der SQL PATH wurde nicht korrekt gesetzt, wenn mit SQL-Naming gearbeitet wird. SQL-Naming berücksichtigt die Bibliotheksliste nicht!!!

Birgitta

Xanas
10-02-10, 13:54
Ich muss das Thema noch mal aufgreifen.

Ich hab eine SQL Function, mit einem Parameter Char erstellt, die wird einfach nicht gefunden, erstelle ich die gleiche Function mit VARCHAR wird sie gefunden, woran liegt das, verstehe ich einfach nicht.

BenderD
10-02-10, 14:20
... das overloading (mehrere Procedures/Functions gleicher Name mit unterschiedlicher Parameterschnittstelle) funktioniert für Procedures und Functions unterschiedlich. Am einfachsten erstellt man Functions immer mit Varchar, dann hat man damit kein Problem. Ansonsten ist RTFM manchmal auch ein Tip.

D*B


Ich muss das Thema noch mal aufgreifen.

Ich hab eine SQL Function, mit einem Parameter Char erstellt, die wird einfach nicht gefunden, erstelle ich die gleiche Function mit VARCHAR wird sie gefunden, woran liegt das, verstehe ich einfach nicht.

andreaspr@aon.at
10-02-10, 15:03
bei procedures ist es egal ob du ein VARCHAR oder CHAR feld hast:

CREATE PROCEDURE MYLIB.TEST1 (
IN INPUT1 CHAR(10))
CALL TEST1 ('TEST')

bei functions ist es nicht egal. also entweder immer mit varchar oder beim aufruf ein cast:

SELECT TEST( CAST('123' AS CHAR(10))) XX FROM MYLIB.MYFILE

lg andreas