If then in sqlplus

Currently, I have the following code in SQL script runs in sqlplus:

DEFINE REGION         = &&1
EXECUTE MY_PROC


I like to add IF THEN condition.  Please remember this is not pl/sql.  How to do?  Thanks.

DEFINE REGION         = &&1

IF REGION ='USA' THEN
EXECUTE MY_PROC
END IF




ewang1205Asked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
MohanKNairConnect With a Mentor Commented:
ewang1205,

sql*plus is not procedural and it is better to code if..then..else clauses within pl/sql.

Mohan
0
 
sathyagiriCommented:
If it was a function you could use some thing like

select decode('&&REGION','USA',MY_FUNC) from dual;

0
 
sathyagiriConnect With a Mentor Commented:
You could probably create a wrapper function that will call your stored proc and then use the above select statement

create or replace my_func returns number
is
begin
my_proc;
return null;
end;
/

Then use
select decode('&REGION','USA',MY_FUNC) from dual;
0
Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

 
actonwangCommented:
It is simple. you don't need to any wrapper function or extra step. sql*plus wil be enough for you to do it.
0
 
actonwangConnect With a Mentor Commented:
the following scriplet will do the logic for you


////////////////////////////////////////
DEFINE REGION=&&1

set feedback off echo off verify off

SPOOL  exec.sql

SELECT 'EXEC MY_PROC'
FROM DUAL
WHERE '&REGION' = 'USA';

SPOOL OFF

@exec.sql
0
 
MohanKNairConnect With a Mentor Commented:
SQL> EGION varchar2(100);

SQL>  :REGION := 'USA'; end;
/

SQL> begin
IF :REGION ='USA' THEN
MY_PROC;
END IF;
/
0
 
ewang1205Author Commented:

actonwang :  I tried the following and returns EXEC MY_PROC as value, it don't EXECUTE MY_PROC.  

SELECT 'EXEC MY_PROC' FROM DUAL WHERE 1=1;


MohanKNair :  I don't want to use BEGIN and END in the SQL
0
 
ewang1205Author Commented:
I found a solution.  I change the MY_PROC to accept in parameter value and use if/then checking the REGION value then run like the following:

EXECUTE MY_PROCE(REGION)
0
 
actonwangCommented:
>>actonwang :  I tried the following and returns EXEC MY_PROC as value, it don't EXECUTE MY_PROC.  

SELECT 'EXEC MY_PROC' FROM DUAL WHERE 1=1;

you'd have to use my whoe script, not just that ONE sql query:

///////////////
DEFINE REGION=&&1

set feedback off echo off verify off

SPOOL  exec.sql

SELECT 'EXEC MY_PROC'
FROM DUAL
WHERE '&REGION' = 'USA';

SPOOL OFF
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.