pl/sql - Mit einer dynamischen Abfrage in einer gespeicherten Prozedur
Ich bin verwenden einer gespeicherten Prozedur zum einfügen von Daten in eine temp-Tabelle über einen cursor.
Dieses Verfahren speichert eine dynamische Abfrage in eine variable Montage der insert/update-Befehl.
Hier ist der code(nicht die vollständige Abfrage, habe ich geschnitten, einige Teile zu machen es leichter zu Lesen):
FOR VC2 IN (SELECT C.OBJETIVO,
C.AUDITORIA ,
C.NOME,
C.PRODUTO
FROM CALCULO C)
LOOP
SELECT ' V_UPD NUMBER := 0;
SELECT (SELECT ID_TIPO_TERR
FROM ZREPORTYTD_TMP
WHERE AUDITORIA = ''' || VC2.AUDITORIA || '''
AND TERRITORIO = ''' || VC2.NOME || '''
AND PRODUTO = ''' || VC2.PRODUTO || ''')
INTO V_UPD FROM DUAL;
UPDATE ZReportYTD_TMP
SET TARGET = ' || VC2.OBJETIVO || '
WHERE AUDITORIA = ''' || VC2.AUDITORIA || '''
AND TERRITORIO = ''' || VC2.NOME || '''
AND PRODUTO = ''' || VC2.PRODUTO || ''';'
INTO V_SQL FROM DUAL;
EXECUTE IMMEDIATE (V_SQL);
END LOOP
In der dynamischen Abfrage, in diesem Teil "SET TARGET = ' || VC2.OBJETIVO || '"
den Wert VC2.OBJETIVO
ist ein Number
geben, und es ersetzt wie "62481,76". In anderen Worten, dieses Komma macht den Befehl falsch und funktioniert nicht.
Gibt es einen einfachen Weg, um die zu ersetzen "," durch "."?
Vielen Dank! (:
Was ist der Datentyp von OBJETIVO ?
Es ist eine Zahl(38,10).
Dann bin nicht sicher, warum würde es wieder die Zahl als formatierten Wert.
Sie sind sich nicht sicher, warum er zurückkehrte, wie es ist oder warum ich will tun, was ich tun möchte?
Was mache ich falsch? Ist es die Berichterstattung einen Fehler? Oder, Sie sind nicht immer gewünschten Ergebnis ?
Es ist eine Zahl(38,10).
Dann bin nicht sicher, warum würde es wieder die Zahl als formatierten Wert.
Sie sind sich nicht sicher, warum er zurückkehrte, wie es ist oder warum ich will tun, was ich tun möchte?
Was mache ich falsch? Ist es die Berichterstattung einen Fehler? Oder, Sie sind nicht immer gewünschten Ergebnis ?
InformationsquelleAutor gabsferreira | 2011-02-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht bauen Sie Ihre Abfrage durch Anhängen von strings. Sie lassen sich öffnen, zu viele bugs und Sicherheitslücken, zuerst alle SQL-injection. Die Notwendigkeit der Verwendung von dynamischen Abfragen nicht rechtfertigen, nicht mit bind-Variablen. Wenn Sie wirklich brauchen, verwenden Sie dynamische Abfragen (es ist nicht klar, aus deinem Beispiel, warum static-update nicht funktionieren würde?!), tun Sie dies:
Oracle wird richtig binden mit dem entsprechenden Typ.
Bereiche wie Hörsäle und Territorio, varchar2 müssen nicht gesetzt werden, innerhalb ' des '?
NÖ, das ist die Schönheit der Vermietung von Oracle tun das binding 🙂
InformationsquelleAutor Vincent Malgrat
Ich sehe keine Notwendigkeit für die Verwendung dynamischer SQL überhaupt.
Warum nicht etwas wie:
InformationsquelleAutor Nick Pierpoint
Ich bin mit Oracle 11g letzten Tag war ich vor problem der
führen dynamische Abfrage in oracle-Prozedur. Ich Suche jede Menge aus.
endlich habe ich die Lösung .
InformationsquelleAutor user2156161