Monday, October 07, 2019

oracle stored proc

create or replace PROCEDURE CreateAliasPaths AS
        pos1 NUMBER:=0;
        pos2 NUMBER:=0;
        origName VARCHAR2(4000);
        origSearchStr VARCHAR2(4000);
        aliasName VARCHAR2(4000);
        aliasPath VARCHAR2(4000);
       
BEGIN
    dbms_output.put_line ('------------ CreateAliasPaths Beginn:' || TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS'));

    FOR r IN (SELECT * FROM Table0) --for testing: where rownum<=3
    LOOP
        pos1:=INSTR(r.ALIAS,' ');
        origName:=SUBSTR(r.ALIAS,1, pos1-1); 
        origSearchStr:='%' || origName  || '%';
        pos2:=INSTR(r.ALIAS,' ',pos1+1);
        if (0=pos2) THEN
            pos2:=LENGTH(r.ALIAS);
        END IF;
        LOOP
            aliasName:=SUBSTR(r.ALIAS,pos1+1, pos2-pos1-1); 
            --dbms_output.put_line('AliasTabelle:' || r.ALIAS);
            --dbms_output.put_line('originalName:' || origName || ',' || pos1 || ' ' || pos2 || ' aliasName:>' || aliasName || '<' );

            FOR rRepro IN (SELECT * FROM table1 WHERE LOWER(PATH) like LOWER(origSearchStr))
            LOOP
                aliasPath:=REPLACE(rRepro.PATH, origName, aliasName);
                --dbms_output.put_line('aliasPath:' || aliasPath );
                UPDATE table1 SET ALIAS=rRepro.ALIAS || ' ' || aliasPath WHERE table1ID=rRepro.table1ID;
            END LOOP;
            --dbms_output.put_line( '-------------------------------------------------' );
            pos1:=pos2;
            EXIT WHEN (pos1>=LENGTH(r.ALIAS));
            pos2:=INSTR(r.ALIAS,' ',pos1+1);
            if (0=pos2) THEN
                pos2:=LENGTH(r.ALIAS);
            END IF;
         END LOOP;   
         --dbms_output.put_line( '=============================================================================' );
    END LOOP;
    COMMIT;   
    dbms_output.put_line ('------------ CreateAliasPaths End:' || TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS'));
END CreateAliasPaths;

No comments: