Solved

Oracle error in procedure

Posted on 2014-04-07
7
766 Views
Last Modified: 2014-04-07
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
Comment
Question by:jknj72
  • 4
  • 3
7 Comments
 
LVL 23

Expert Comment

by:paquicuba
ID: 39983156
icolPREV := 0;  -----FIX HERE
0
 

Author Comment

by:jknj72
ID: 39983181
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
 
LVL 23

Accepted Solution

by:
paquicuba earned 500 total points
ID: 39983217
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
Top 6 Sources for Identifying Threat Actor TTPs

Understanding your enemy is essential. These six sources will help you identify the most popular threat actor tactics, techniques, and procedures (TTPs).

 

Author Comment

by:jknj72
ID: 39983309
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
 

Author Closing Comment

by:jknj72
ID: 39983313
thanks
0
 
LVL 23

Expert Comment

by:paquicuba
ID: 39983314
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
 

Author Comment

by:jknj72
ID: 39983347
New question is ID:28406715

Thanks
0

Featured Post

Highfive + Dolby Voice = No More Audio Complaints!

Poor audio quality is one of the top reasons people don’t use video conferencing. Get the crispest, clearest audio powered by Dolby Voice in every meeting. Highfive and Dolby Voice deliver the best video conferencing and audio experience for every meeting and every room.

Join & Write a Comment

Suggested Solutions

SQL Command Tool comes with APEX under SQL Workshop. It helps us to make changes on the database directly using a graphical user interface. This helps us writing any SQL/ PLSQL queries and execute it on the database and we can create any database ob…
Using SQL Scripts we can save all the SQL queries as files that we use very frequently on our database later point of time. This is one of the feature present under SQL Workshop in Oracle Application Express.
Video by: Steve
Using examples as well as descriptions, step through each of the common simple join types, explaining differences in syntax, differences in expected outputs and showing how the queries run along with the actual outputs based upon a simple set of dem…
This video explains what a user managed backup is and shows how to take one, providing a couple of simple example scripts.

706 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now