• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 819
  • Last Modified:

Oracle error in procedure

I am cleaning up procedures before moving database to prod. One of the procs had an error and I thought I would post it while I try and figure it out as well...Here is the proc and I attached a picture so you can see the error too....

CREATE OR REPLACE PROCEDURE ANET.SP_OMNI_ENT_COLUMN_REALIGN
(iPAGEID IN  NUMBER)

IS
BEGIN
    DECLARE
        icolPREV NUMBER;
        icolNEXT NUMBER;
   
    cursor cur is
        select section_ordinal, section_table_cell
        from omni_ent_page_content where page_id=iPAGEID
        order by section_ordinal asc, section_table_cell asc;
     
    BEGIN    
        icolPREV = 0;  ------ERROR HERE
     FOR section_ordinal in cur
        LOOP
                Case When cur.section_table_cell = 0 then
                    Case When icolPREV = 0 then
                        --donothing
                    when icolPrev = 1 then
                        UPDATE omni_ent_page_content set section_table_column = 0 where page_id=iPAGEID and section_ordinal=cur.section_ordinal-1;
                    when icolPREV = 2 then
                        --donothing
                    when icolPREV = 3 then
                        --donothing
                    end;
                When cur.section_table_cell = 1 then
                    Case When icolPREV = 0 then
                        --donothing
                    when icolPrev = 1 then
                        SELECT section_table_cell into icolNEXT from omni_ent_page_content where page_id=iPAGEID and section_ordinal = cur.section_ordinal + 1;
                        if icoNEXT is NULL then
                            --donothing
                        else
                            --case when icoNEXT = 0 then
                               
                        end if;
                       
                    when icolPREV = 2 then
                        --donothing
                    when icolPREV = 3 then
                        --donothing
                    end;
                When cur.section_table_cell = 2 then
                    Case When icolPREV = 0 then
                        --donothing
                    when icolPrev = 1 then
                        UPDATE omni_ent_page_content set section_table_column = 0 where page_id=iPAGEID and section_ordinal=cur.section_ordinal-1;
                    when icolPREV = 2 then
                        --donothing
                    when icolPREV = 3 then
                        --donothing
                    end;
                When cur.section_table_cell = 3 then
                    Case When icolPREV = 0 then
                        --donothing
                    when icolPrev = 1 then
                        UPDATE omni_ent_page_content set section_table_column = 0 where page_id=iPAGEID and section_ordinal=cur.section_ordinal-1;
                    when icolPREV = 2 then
                        --donothing
                    when icolPREV = 3 then
                        --donothing
                    end;
                End;
        END LOOP;
    END;
   EXCEPTION
     WHEN NO_DATA_FOUND THEN
       NULL;
     WHEN OTHERS THEN
       -- Consider logging the error and then re-raise
       RAISE;

END SP_OMNI_ENT_COLUMN_REALIGN;
Cursor-Error.jpg
0
jknj72
Asked:
jknj72
  • 4
  • 3
1 Solution
 
paquicubaCommented:
icolPREV := 0;  -----FIX HERE
0
 
jknj72Author Commented:
I actually tried that prior to me asking the question. The error moves to the first CASE statement within the first CASE statement. I have attached a pic so you can see the error where the red is underlined...

Thanks
Cursor-Error.jpg
0
 
paquicubaCommented:
That's because the whole freaking procedure is full of errors, typos, bad syntax, etc, etc. Are you serious about this procedure being moved to production?

I'm not 100% sure it will compile, but try the below version and let me know.

Among the fixes are:

"--donothing" does nothing for sure -that's a comment, so you need to put at least a NULL there.

End your CASEs with "end case;" not just "end;"

What the heck is this --> FOR section_ordinal in cur?

And this --> cur.section_table_cell ?

 icolNEXT <> icoNEXT




CREATE OR REPLACE PROCEDURE SP_OMNI_ENT_COLUMN_REALIGN
(iPAGEID IN  NUMBER)

IS
BEGIN
    DECLARE
        icolPREV NUMBER;
        icolNEXT NUMBER;
   
    cursor cur is
        select section_ordinal, section_table_cell
        from omni_ent_page_content where page_id=iPAGEID
        order by section_ordinal asc, section_table_cell asc;
     
    BEGIN    
        icolPREV := 0;  ------ERROR was here
     FOR rec in cur
        LOOP
                Case When rec.section_table_cell = 0 then
                    Case When icolPREV = 0 then
                        NULL; --donothing
                    when icolPrev = 1 then
                        UPDATE omni_ent_page_content set section_table_column = 0 where page_id=iPAGEID and section_ordinal=rec.section_ordinal-1;
                    when icolPREV = 2 then
                        NULL; --donothing
                    when icolPREV = 3 then
                        NULL; --donothing
                    end case;
                When rec.section_table_cell = 1 then
                    Case When icolPREV = 0 then
                        NULL; --donothing
                    when icolPrev = 1 then
                        SELECT section_table_cell into icolNEXT from omni_ent_page_content where page_id=iPAGEID and section_ordinal = rec.section_ordinal + 1;
                        if icolNEXT is NULL then
                            NULL; --donothing
                        else
                            NULL; --case when icolNEXT = 0 then
                               
                        end if;
                       
                    when icolPREV = 2 then
                        NULL; --donothing
                    when icolPREV = 3 then
                        NULL; --donothing
                    end case;
                When rec.section_table_cell = 2 then
                    Case When icolPREV = 0 then
                        NULL; --donothing
                    when icolPrev = 1 then
                        UPDATE omni_ent_page_content set section_table_column = 0 where page_id=iPAGEID and section_ordinal=rec.section_ordinal-1;
                    when icolPREV = 2 then
                        NULL; --donothing
                    when icolPREV = 3 then
                        NULL; --donothing
                    end case;
                When rec.section_table_cell = 3 then
                    Case When icolPREV = 0 then
                        NULL; --donothing
                    when icolPrev = 1 then
                        UPDATE omni_ent_page_content set section_table_column = 0 where page_id=iPAGEID and section_ordinal=rec.section_ordinal-1;
                    when icolPREV = 2 then
                        NULL; --donothing
                    when icolPREV = 3 then
                        NULL; --donothing
                    end case;
                End case;
        END LOOP;
    END;
   EXCEPTION
     WHEN NO_DATA_FOUND THEN
       NULL;
     WHEN OTHERS THEN
       -- Consider logging the error and then re-raise
       RAISE;

END SP_OMNI_ENT_COLUMN_REALIGN;
/
0
Configuration Guide and Best Practices

Read the guide to learn how to orchestrate Data ONTAP, create application-consistent backups and enable fast recovery from NetApp storage snapshots. Version 9.5 also contains performance and scalability enhancements to meet the needs of the largest enterprise environments.

 
jknj72Author Commented:
Welcome to my nightmare.... I didnt write this but I have to fix them before we go to Prod. It worked. Thanks for the help

Also, If you have a better way to do this Id be happy to post another question to make this better. The Cases that dont have anything in them will have logic before going to Prod so they are just reserved for the logic for now.

Thanks for your help and let me know if you want me to post the question to make this better...
0
 
jknj72Author Commented:
thanks
0
 
paquicubaCommented:
lol. I completely understand you.

Sure, you can post another question, but it may not be me answering it -there are too many talented developers here.
0
 
jknj72Author Commented:
New question is ID:28406715

Thanks
0

Featured Post

[Webinar] Cloud and Mobile-First Strategy

Maybe you’ve fully adopted the cloud since the beginning. Or maybe you started with on-prem resources but are pursuing a “cloud and mobile first” strategy. Getting to that end state has its challenges. Discover how to build out a 100% cloud and mobile IT strategy in this webinar.

  • 4
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now