Seite 1 von 1

variablen übergabe an sql

Verfasst: Montag 19. November 2007, 09:52
von mephisto23
hi leute
der anfänger hat mal wieder ne frage:
wie schaffe ich es eine varialbe an einen sql statement zu übergeben.

Code: Alles auswählen

import cx_Oracle
con = cx_Oracle.connect("***/****@******")
cur= con.cursor()

CHA_IN_VAR = "hallo"

sql =  'DECLARE CHA_IN_VAR VARCHAR2(200); BEGIN CHA_IN_VAR := NULL; TIRIS.P_PYTHON ( CHA_IN_VAR ); COMMIT; END;'

cur.execute(sql)
con.commit()
das sql statement ruft eine oracle funktion auf... soweit funktioniert es. nur die variabel wird nicht übernommen

danke für eure hilfe

Re: variablen übergabe an sql

Verfasst: Montag 19. November 2007, 11:09
von gerold
mephisto23 hat geschrieben:wie schaffe ich es eine varialbe an einen sql statement zu übergeben.
Hallo mephisto23!

Das könnte dir helfen: [wiki]Parametrisierte SQL-Queries[/wiki]

Welcher paramstyle von cx_Oracle verwendet wird, musst du selber herausfinden.

mfg
Gerold
:-)

Verfasst: Montag 19. November 2007, 11:40
von mephisto23
sorry für die blöde frage aber wie soll das gehn?
CHA_IN_VAR is ja eigentlich eine variable die ins oracel gecastet wird.

Verfasst: Montag 19. November 2007, 12:37
von gerold
mephisto23 hat geschrieben:sorry für die blöde frage aber wie soll das gehn?
CHA_IN_VAR is ja eigentlich eine variable die ins oracel gecastet wird.
SQL-Anweisungen sind nur Text. Also musst du den Text anpassen. Und ``TIRIS.P_PYTHON`` kenne ich nicht.

Code: Alles auswählen

CHA_IN_VAR = "hallo"
sql = """
DECLARE
  CHA_IN_VAR VARCHAR2(200);
BEGIN
  CHA_IN_VAR := ?;
  ....;
END;
"""
cur.execute(sql, (CHA_IN_VAR, )) 
Dieser code setzt allerdings voraus, dass cx_Oracle das Fragezeichen (?) als Platzhalter verwendet.

Ich weiß jetzt nicht wirklich, wo da im SQL die Strichpunkte hin gehören. ;-)

Ob ein ``COMMIT`` in der SQL-Anweisung gut ist? Das sollte ja von ``conn.commit()`` erledigt werden.

Es kann natürlich sein, dass cx_Oracle das ganze etwas anders handhabt. Aber was kann ich dir wirklich nicht sagen. Ich habe damit nie etwas gemacht.

mfg
Gerold
:-)

Verfasst: Montag 19. November 2007, 12:52
von BlackJack
@gerold: Das sieht nach einee Funktionsdefinition in der Datenbank aus, und *in* einer Funtkion, die die DB ändert ein COMMIT abzusetzen kann schon Sinn machen.