Wir haben eine Oracle-Datenbank und wir verwenden PL/SQL Developer für den Editor. Es gibt eine alte JavaScript-Funktion, die tausende Male in verschiedenen Prozeduren verwendet wurde. Wir müssen den Namen dieser Funktion ersetzen. Gibt es einen Weg in PL/SQL Developer zu finden und zu ersetzen das Wort in allen Prozeduren und alle Vorkommen wie andere Texteditoren oder IDEs (Netbeans, Visual Studio, Eclipse, Android Studio) tun?Finden Sie Vorkommen eines Textes und ersetzen Sie sie durch ein neues Wort in PL/SQL Developer?
1
A
Antwort
1
Ich habe versucht, einen Code für Ihren Zweck zu schreiben, hoffe, es hilft !!
Zuerst müssen Sie eine Tabelle, die Ergebnisse speichern:
CREATE TABLE NEW_SOURCES
(
OLD_NAME VARCHAR2 (256 BYTE),
NEW_NAME VARCHAR2 (256 BYTE),
SOURCE CLOB,
CHANGE_DATE DATE
);
nun die Funktion, dies zu tun:
CREATE OR REPLACE FUNCTION GENERATE_REFACTOR (
P_OLD_NAME IN VARCHAR2,
P_NEW_NAME IN VARCHAR2
)
RETURN NUMBER --Returns number of objects if success and -1 otherwise
IS
CURSOR CUR_OBJ (
P_NAME IN VARCHAR2)
IS
SELECT NAME, TYPE, OWNER
FROM ALL_DEPENDENCIES
WHERE REFERENCED_NAME = P_NAME
AND TYPE IN ('PACKAGE', 'PACKAGE BODY', 'FUNCTION', 'PROCEDURE')--Specify your object type here
ORDER BY 3, 2, 1;
CURSOR CUR_SRC (
P_NAME IN VARCHAR2,
P_TYPE IN VARCHAR2,
P_OWNER IN VARCHAR2
)
IS
SELECT *
FROM ALL_SOURCE
WHERE NAME = P_NAME AND TYPE = P_TYPE AND OWNER = P_OWNER
ORDER BY LINE;
V_OLD_FUNCTION_NAME VARCHAR2 (256);
V_NEW_FUNCTION_NAME VARCHAR2 (256);
C_SOURCE CLOB;
V_BUFFER VARCHAR2 (4000);
V_MODIFIED_LINE VARCHAR2 (4000);
V_COUNT NUMBER;
V_GAP VARCHAR2 (512)
:= CHR (10)
|| '---------------------'
|| CHR (10)
|| 'CREATE OR REPLACE '; -- You can add your own comment header here
PROCEDURE APPEND_TEXT (
V_CLOB IN OUT NOCOPY CLOB,
V_BUFFER IN OUT NOCOPY VARCHAR2,
V_TEXT VARCHAR2
)
--Can Append Text to CLOB in optimized way
--Useful in adding a lot of records one by one to a clob
--Notice: have to provide a big varchar2 buffer and clean it afterwards
IS
BEGIN
V_BUFFER := V_BUFFER || V_TEXT;
EXCEPTION
WHEN VALUE_ERROR
THEN
IF V_CLOB IS NULL
THEN
V_CLOB := V_BUFFER;
ELSE
DBMS_LOB.APPEND (V_CLOB, V_BUFFER);
V_BUFFER := V_TEXT;
END IF;
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE ('Exc: ' || SQLERRM);
END;
BEGIN
V_OLD_FUNCTION_NAME := P_OLD_NAME;
V_NEW_FUNCTION_NAME := P_NEW_NAME;
--If you wanna gather sources all in a single clob use these two lines and if you want them each one in a single clob comment them
DBMS_LOB.CREATETEMPORARY (C_SOURCE, FALSE, 1000);
V_BUFFER := NULL;
FOR OBJ IN CUR_OBJ (V_OLD_FUNCTION_NAME)
LOOP
--If you wanna gather sources all in a single clob comment these two lines and if you want them each one in a single clob uncomment them
--DBMS_LOB.CREATETEMPORARY (C_SOURCE, FALSE, 1000);
--V_BUFFER := NULL;
V_BUFFER := V_BUFFER || V_GAP;
FOR LINE IN CUR_SRC (OBJ.NAME, OBJ.TYPE, OBJ.OWNER)
LOOP
IF LINE.TEXT LIKE '%' || V_OLD_FUNCTION_NAME || '%'
THEN
SELECT REPLACE (
LINE.TEXT,
V_OLD_FUNCTION_NAME,
V_NEW_FUNCTION_NAME
)
INTO V_MODIFIED_LINE
FROM DUAL;
APPEND_TEXT (C_SOURCE, V_BUFFER, V_MODIFIED_LINE);
ELSE
APPEND_TEXT (C_SOURCE, V_BUFFER, LINE.TEXT);
END IF;
END LOOP;
--If you wanna gather sources all in a single clob comment these two lines and if you want them each one in a single clob uncomment them
--DBMS_LOB.APPEND (C_SOURCE, V_BUFFER);
-- INSERT INTO NEW_SOURCES VALUES (OBJ.OWNER||'.'||OBJ.NAME, OBJ.TYPE, C_SOURCE, SYSDATE);
V_COUNT := V_COUNT + 1;
END LOOP;
--If you wanna gather sources all in a single clob use these two lines and if you want them each one in a single clob comment them
DBMS_LOB.APPEND (C_SOURCE, V_BUFFER);
INSERT INTO NEW_SOURCES VALUES (V_OLD_FUNCTION_NAME, V_NEW_FUNCTION_NAME, C_SOURCE, SYSDATE);
RETURN V_COUNT;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE ('Exc: ' || SQLERRM);
RETURN -1;
END;
/
Jetzt begehen und abfragen, um die NEW_SOURCES Tabelle, die geänderte Quellen gibt, können Sie Speichern Sie es in einer .SQL-Datei und führen Sie es in pl/SQL-Entwickler.
Sie eine Sicherung auf dem ersten
Denken Sie daran, Sie Fehler in laufenden endgültige Skript bei ‚erstellen oder ersetzen‘ -Klausel, wenn ja, dann es in v_gap Variablendeklaration Kommentar bekommen können.
Viel Glück.
Verwandte Themen
- 1. Finden Sie alle Vorkommen eines Wortes und ersetzen durch HTML
- 2. Ersetzen Sie ein Vorkommen durch Regexp
- 3. Ersetzen Sie ein QScrollArea-Layout durch ein neues
- 4. Finden Sie ein variables Wort und ersetzen Sie es in Datei mit Bash
- 5. PyEnchant: Ersetzen Sie internetfreundliche Wörter durch ein englisches Wort
- 6. VIM alle Vorkommen finden und durch Eingabe ersetzen
- 7. Ersetzen Sie ein Wort in einer Zeichenfolge durch Powershell
- 8. Finden Sie das nächste Wort in mehreren Dateien und ersetzen
- 9. Ersetzen Sie ein Wort in C
- 10. Finden Sie alle Vorkommen eines Wortes in einer Liste?
- 11. Finden Sie ein Wort in einem String
- 12. Ersetzen Sie Vorkommen rasche regex
- 13. Suchen Sie ein Wort und ersetzen Sie es durch Wörter aus der Datei
- 14. Finden Sie alle Vorkommen und Standorte eines Teilstrings
- 15. Ersetzen Sie alle Vorkommen von bestimmten Wörtern
- 16. Suchen Sie Text zwischen zwei Tags und ersetzen Sie es durch die Großbuchstabe desselben Textes
- 17. Wählen Sie ein Wort und markieren Sie das Wort aus dem gesamten HTML-Körper
- 18. Ersetzen Sie ein Bild durch Apache POI
- 19. Ersetzen Sie das letzte Vorkommen von Speicherplatz durch sed
- 20. Ersetzen Sie alle Vorkommen eines Strings in JavaScript nicht
- 21. Ersetzen Sie alle Vorkommen von wissenschaftlichen Zahlen durch reguläre Zahlen
- 22. Regex - ersetzen Sie jedes übereinstimmende Vorkommen durch Großbuchstaben
- 23. Finden Sie Vorkommen eines beliebigen Werts in einem Array in einer Zeichenfolge und drucken Sie
- 24. Finden Sie das erste Vorkommen und die folgenden Vorkommen
- 25. Vergleichen Sie eine Regex-Übereinstimmung aus zwei separaten Dateien und ersetzen Sie sie durch Werte von
- 26. Finden Sie ein HTML-Element nach ID und ersetzen Sie seinen Inhalt durch PHP
- 27. Ersetzen Sie ein bestimmtes Wort durch ein anderes in einer Datei
- 28. So finden Sie Schriftart und ersetzen durch markieren
- 29. So finden und ersetzen Sie Zeile nur einmal, wenn sie mehrfach in Python gefunden werden
- 30. Sinon: Stub und gesamtes Objekt und ersetzen Sie es durch ein neues Objekt
Wo möchten Sie es ersetzen? Im PL/SQL-Quelltext gespeicherter Prozeduren und Pakete? – Codo
Ja, im PL/SQL-Quellcode von gespeicherten Prozeduren und Paketen. – mismanc
Sie können nach allen Vorkommen wie diesem suchen: 'SELECT * FROM ALL_SOURCE WHERE TEXT LIKE '% Funktionsname%''. – Codo