Howto check substitution variable in sqlplus

Hi all,
Is there a way to pass a parameter to a sql script (&1) and set a default if the parameter was not passed.
This should be possible without sqlplus asking for OBJECT_OWNER at runtime.
Something like IFDEF would be fine ;-)
DEFINE OBJECT_OWNER = nvl(&1,'OO')
PROMPT Run for schema: &OBJECT_OWNER
thanks for your help
chris

Frank Kulash wrote:
Hi,
I don't think there's any good way.
You can SPOOL the results of DEFINE, and then parse the output file to see if it contains a given variable name.
The following should set &got_variable to 'Y' or 'N', depending on whether &1 is defined or not:
SPOOL  define_output.lst
DEFINE
SPOOL     OFF
COLUMN     got_variable_col     NEW_VALUE     got_variable
SELECT     CASE
          WHEN  REGEXP_LIKE ( Q'[
@define_ouptut.lst
                      , '^DEFINE 1 *='     -- or put any variable name in place of 1
          THEN  'Y'
          ELSE  'N'
     END             AS got_variable_col
FROM     dual;I haven't test this.
Edited by: Frank Kulash on Oct 30, 2009 6:58 AMNo that won't work, SQL*PLUS commands (the '@') cannot be used inside a SQL statement or PL/SQL block.
Since SQL*PLUS is not designed to have any flow control, best approach may be to use named substitution variables and a more formal usage pattern:
Create initialization script(s) that define all the substitution variables and sets them to their default values.
Create completion script(s) the undefine all the substitution variables.
Any user of your script system must call the initialization script(s) first.
Then if they want to override defaults, they redefine the variable.
Then they call the script(s) that do the interesting stuff. The scripts only use the named variables.
When done, call the completion script(s) to clean up.

Similar Messages

  • How to use substitution variables in sqlplus activity of process flow

    I have a process flow that does nothing more than create a couple of packages that I cannot successfully deploy from OWB. A workaround, not something that I want to do, but currently there is not much time to adjust the packages so they can be deployed from OWB.
    I can successfully create the packages from files that are present in a directory on the server. But the location (directory) is not the same in all cases (OTAP). So I thought to use an input parameter to the process flow (named TELLINGEN) and use that in the sqlplus activity.
    I have created the parameter START_PATH with a default value.
    I have added an sqlplus activity and placed the following into the PARAMETER_LIST variable of the activity:
    ?${Target.ConnectString}?@${TELLINGEN.START_PATH}/npl_dbug.pkg?
    When I run the process flow I see the following in the output:
    SQL*Plus: Release 10.2.0.3.0 - Production on Tue Mar 18 18:10:14 2008
    Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
    With the Partitioning, OLAP and Data Mining options
    SP2-0310: unable to open file "${TELLINGEN.START_PATH}/npl_dbug.pkg"
    SQL> SQL> Disconnected from Oracle Database 10g Enterprise Edition Release
    10.2.0.3.0 - 64bit Production
    With the Partitioning, OLAP and Data Mining options
    It obviously connects to sqlplus but then cannot find the file. Presumably because the variable has not been substituted.
    How can I persuade the activity to substitute the variable?
    Kind regards,
    Eric.

    Have been reading around a bit and found the (a) solution:
    I placed the following in PARAMETERLIST:
    ?${Target.ConnectString}?@${Working.RootPath}/base64.sql?
    And it turns out ${Working.RootPath} is pointing to the location you can provide under the configure for the sqlplus activity in the process flow. Just as you have to provide the target destination as indicated here: Re: SQLPLUS Activity in Process Flow
    From the documentation it was not immediately clear to me where Working.RootPath was pointing to.

  • SQLPlus problem - user enters quote in substitution variable

    Hello,
    I have a SQL Plus script report, where user is prompted to enter "customer name".
    Some customer names contain single quotes/apostrophes.
    When user type such name, the script will error out with
    ORA-01756: quoted string not properly terminated
    I can't ask users to use '' instead of ' . I can't control what they enter. Is there a way to process single quote so the statement below will work:
    select * from sometable where customer_name = '&1'
    where &1 = Smith's
    I can't do replace, etc, because it's all error out with the same error. I need to replace ' on SQLPlus level somehow. One logical way to do it would be to redefine the string separation charachter somehow...
    SQL*Plus: Release 8.0.6.0.0
    Thanks,
    Vlad
    Message was edited by:
    user454392

    As it's a SQL*Plus substitution variable it is literally copied into the code just prior to compilation, so you can't stop it from breaking the compilation of the code. q quoted strings are the only solution I can think of but of course they are only available from 10g onwards.
    The other alternative is to capture the input in a shell/batch script which validates it first and then passes the value to the SQL to be executed.

  • Is it possible to increase the substitution variable value length?

    Hi,
    Is it possible to increase the substitution variable value length to higher value? I checked the SQL User Guide (http://download.oracle.com/docs/cd/B19306_01/server.102/b14357/apa.htm) and it says that the limit is 240 characters.
    i just want to know any workaround for this issue?
    Thanks.

    Hi,
    Basically I have a script contains SQL statement (eg: select c,b,a.........from table a.... group by a,b and order by b c) and I have another shell script that will read the whole entire SQL statement
    In my shell script, i do it in this way.
    sqlplus -S test/test@testdb $SQL statement and i hit the following issue
    string beginning ""select c...." is too long. maximum size is 239 characters. {code}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

  • Error with define substitution variable in SQL

    Hi there,
    I am using PL/SQL developer and trying to define a substitution variable as follows:
    define freq = 'Weekly'
    Then later on, in my SQL statement, I used this variable in WHERE statement as follows:
    WHERE ... (&freq = 'Weekly') and ...
    But I got the "ORA-00904: "WEEKLY": invalid identifier" error.
    Where is the problem?
    Thanks in advance!

    I don't know about PL/SQL developer but in sqlplus you need single quotes around the variable.
    SQL> define freq = 'Weekly'
    SQL> select null from dual
      2  where &freq = 'Weekly';
    old   2: where &freq = 'Weekly'
    new   2: where Weekly = 'Weekly'
    where Weekly = 'Weekly'
    ERROR at line 2:
    ORA-00904: "WEEKLY": invalid identifier
    SQL> edi
    Wrote file afiedt.sql
      1  select null from dual
      2* where '&freq' = 'Weekly'
    SQL> /
    old   2: where '&freq' = 'Weekly'
    new   2: where 'Weekly' = 'Weekly'
    N
    SQL>

  • Substitution Variable in WA error

    Hi there,
    We have moved our server's IP beacuse we promoted developement (server07) to production (server08). Prior to that all reports worked fine. Now we're having some problems with the Substitution Variables, because everytime we select them, to include them in a report, it displays the following error:
    *"Actual_Month is not a valid substitution variable for dimension Period"*
    In fact I've tried to create a new variable with a new name and I get the same error. What intrigues me is that if we use the same variable for Dynamic Time Series let's say Y-T-D(Actual_Month) it works and displays a value.
    Maybe is there something in the connection but still with no clue how to fix it. Any database or setting at the config file to set?
    Thanks!

    I don't know about PL/SQL developer but in sqlplus you need single quotes around the variable.
    SQL> define freq = 'Weekly'
    SQL> select null from dual
      2  where &freq = 'Weekly';
    old   2: where &freq = 'Weekly'
    new   2: where Weekly = 'Weekly'
    where Weekly = 'Weekly'
    ERROR at line 2:
    ORA-00904: "WEEKLY": invalid identifier
    SQL> edi
    Wrote file afiedt.sql
      1  select null from dual
      2* where '&freq' = 'Weekly'
    SQL> /
    old   2: where '&freq' = 'Weekly'
    new   2: where 'Weekly' = 'Weekly'
    N
    SQL>

  • Problem with my substitution variable.

    My substitution variables don't prompt properly now. It worked fine before, but I don't know what I did to it. Here is the test code:
    set define on;
    connect sys/&sysPassword @&instanceName as sysdba;
    execute dbms_output.put_line('this is a test');
    When I tried to execute above lines in sqlplus, it didn't prompt anything, but got following result instead:
    SQL> set define on;
    SQL> connect sys/&sysPassword@&instanceName as sysdba;
    Enter value for syspassword: execute dbms_output.put_line('this is a test');
    Enter value for instancename:
    SP2-0306: Invalid option.
    Usage: CONN[ECT] [logon] [AS {SYSDBA|SYSOPER}]
    where <logon> ::= <username>[<password>][@<connect_string>] | /
    SQL>
    I remember when I used substitution variables before in sqlplus worksheet, it popup a dialog for input, but it doesn't anymore.
    Any ideas about this issue? Or what setting could affect the behavior? Thanks in advance.

    It would work only if you put these set of statements in a .SQL file and run that file at SQL*Plus prompt:
    SQL> @the_sql_script_created_above.SQL

  • How to use substitution variables in Microsoft Word using Hyperion Smart view

    Can we use Substitution Variables in copy data points and refresh in Microsoft Word? I tried it and it does not work dynamically (copy data points only copies what was in excel cell at that point). It only copies the static value of that variable from that cell. I want to use it dynamically in Word so that if I change the value of that variable in Essbase, it is updated in Word upon refresh. Any idea??
    We need this feature for reporting in microsoft word and keep using the data points every year (instead of copying the cells from excel over again)
    Any help/suggestion is appreciated.
    Thanks

    you can't use substitution variables with copy data points. I had tried a while ago (post 111.1.2.1.102) and it wouldn't work.  I checked with Oracle development and they said it I not available

  • Substitution Variable Issue while exporting from Essbase.sec file

    Hello All,
    I have an unusually distinct problem.
    I have 2 environments (Development and Production) where each environment has a seperate server with Essbase installed in it.
    When I tried to get information of the Substitution variables using the 'export security_file to data_file' command through MaxL and then checked the output file in Development, it showed me the right number of substitution variables and their values.
    But when I did he same with my Production environment it gives exactly 1 less no of substitution variables in the export file, specifically the last substitution variable that was updated through the Essbase Administration Console.
    I guess it is not updating the Essbase.sec file with the last updated Substitution variable. But I can't understand why since the same functionality works in development but not in production.
    Thank You.

    Hi all,
    In addition, I exported the Essbase.sec file after a long time after changing the Substitution variable and now it does show the updated substitution variable.
    I feel that Essbase does refresh the Essbase.sec file but after a long time. Is there some setting within Essbase that is done which refreshes the artifact files after a while. Or is this a setting within the system in which Essbase has been installed (in my case Linux).
    Also the Substitution Variable that has been created is for (all apps) and (all dbs). Is this the reason why this is not working because I tried changing some other Substitution variable which is for a specific app and a specific dbs and it worked fine.
    Thank You.
    Edited by: 923021 on 27 Mar, 2012 6:15 AM

  • Essbase substitution variable used for SQL Dimension load-URGENT

    Hi All,
    I am creating one dimension through SQL Dimension load rule writing by parent child build rule. The SQL query is like below---
    distinct trim(dist_mobile),trim(ret_mobile) from dist_retailer al1 where al1.proc_dt=to_date(&Proc_date,'dd/mm/yyyy')
    When I fixed the value of proc_date (e.g.- '27/09/2008') then it is retrieving data properly, but when I try to make the same as a essbase variable as shown above (to give user the priviledge to select for which date data will be fetched from RDBMS to create the dim) and after setting the aforesaid value of that variable in essbase subs var screen and click 'OK/Retrieve' in rule,it is returning no rows executing the query as well as no error coming.
    I guess in query nothing is wrong but the subs variable part is not working. Can anybody please give some insight to resolve the problem.
    In this context, I would like to mention that I will have to use substitution variable in some other rule file also to automate the load process. How can I use essbase subs variable in SQL load rule? Could you please show me a proper summarise query illustrating how to use the subs var in aforesaid purpose for the sake of understanding?
    Thanks in advance.

    Hi,
    Sorry for delayed response. Appreciate your inputs. At last I have found out the solution which is as below----
    distinct trim(dist_mobile),trim(ret_mobile) from dist_retailer al1 where al1.proc_dt=to_date('&Proc_Dt','dd/mm/yyyy')
    after setting the substitution variable as Proc_Dt and set the value as 27/09/2008 (without any quotation mark or such sign) now I checked and now it is retrieving fine.
    Thanks & Regards.

  • Substitution variables in Sql*Plus

    Hi all,
    How to make Sql*Plus ask for the substitution variable value one time only for a substitution variable even if it appears multiple times inside a query ? Because so far each time I launched the query below then I have been asked two times by Sql*Plus for the variable value. For example : select ref_site from t_comsis where longitude_lamb + latitude_lamb < &distance + power(&distance,2).
    Thanks

    of course accept is more friendly, you can check for valid number, you can have a prompt or a hidden input.
    you can also undef your variable if you prefer the && solution
    SQL> select &&x+&&x from dual;
    Enter value for x: 1
    old   1: select &&x+&&x from dual
    new   1: select 1+1 from dual
           1+1
             2
    SQL> undef x
    SQL> r
      1* select &&x+&&x from dual
    Enter value for x: 2
    old   1: select &&x+&&x from dual
    new   1: select 2+2 from dual
           2+2
             4

  • Substitution variable in a cross-dimensional operator

    All,
    Essbase doesn't like this:
    "Jan"(
    ("Actuals"->"2011"->"001"->"abc") = ("Run1"->"2011"->"000"->&varAP);
    can I have a substitution variable inside a cross-dimensional operator?

    The basic construct works for me in Sample.Basic. When you say Essbase doesn't like it, what exactly happens - fails syntax check, errors on execution or just doesn't produce the right results?
    Sometimes it's necessary to include quotes in the subvar value itself, e.g. setting your subvar to *"X Y Z"* including the quotes rather than X Y Z.
    I would guess you've already tried this, but does the script validate and run successfully if you replace the subvar with the value of the subvar?

  • Substitution variable for multiple months

    Ideally, i would like to have a calc script with a substitution variable FIX(&Month) which points to specified months. I have tried setting the value for my substitution variable in different ways
    1.
    Variable = Month
    Value = "January""February"
    2.
    Variable = Month
    Value = "January","February"
    However, the script seems to be failing to pick up the second month as it returns no values for February. If i specify the months in the calc script, it works just fine. This suggests to me i'm getting the syntax wrong for the substitution variable.
    Any ideas?

    There is nothing strange it can behave. It will work.
    I am using this in production for years to genarate comma seperated scenario list with out any issues.
    What a substitution variable will do?
    It will store a string as a value for the variable and resolve at the time of calc. if the value is a valid member set it will work.
    I believe issue is not because of that.
    However, the script seems to be failing to pick up the second month as it returns no values for FebruaryIs it throwing any error in syntax check or in executing. Answer is No from the above statement. But you are not seeing the expected results in the calc.
    first check the application log whether the calc is happening for both jan and feb.
    Then why the calc is not as of expected for feb.

  • How can i use substitution variable

    Hai All
    This is my sql statement
    SELECT (TO_DATE(TO_CHAR(Intime,'DD-MON-YYYY')||' '||
    TO_CHAR(0815,'0000'),'DD-MON-YYYY HH24:MI')-intime) * 24*60
    from dail_att where to_char(intime,'hh24mi') between 0700 and 0815 ;
    Here my table name called Dailyattendance
    Intime field is declared as Date Type
    So now i have hardcoded 0815 and now my intime is subtracted from this time so i can calculate the employee
    coming late so how can i use substitution variable here to give the value at run time
    Ie i need to give 0815 instead or any other time at runtime
    Thanks In advance
    Srikkanth.M

    Where exactly are you planing to use it? Is sqlplus or at any other front end?
    One way is to use below given SQL
    SELECT   (  TO_DATE (   TO_CHAR (intime, 'DD-MON-YYYY')
                         || ' '
                         || TO_CHAR (:TIME_VAR, '0000'),
                         'DD-MON-YYYY HH24:MI'
              - intime
           * 24
           * 60
      FROM dail_att
    WHERE TO_CHAR (intime, 'hh24mi') BETWEEN 0700 AND 0815;*009*
    Edited by: 009 on Apr 6, 2010 2:15 AM

  • Substitution variables

    Hi friends<BR>can i use substitution variables in data loading <BR>ie in time dimension i fixed time every month first day of the week.<BR>i need automatic work?<BR>can i assign system date to substitution variable?<BR>How can i change the substitution variable automatically?<BR>

    Hi mb:<BR><BR><OL>1. A SubVar cannot be used during a data load<BR>2. A SubVar can indeed contain the system date, but Essbase provides no built-in way to automate this. There is a utility, however, here on HDN that will do so. Check out this link: <a target=blank class=ftalternatingbarlinklarge href="http://dev.hyperion.com/download/utilities/substitution_variable_command_utility_version_2.cfm">SubVar Utility</a><BR></OL>

Maybe you are looking for

  • How do I get my AppleID to work with iCloud?

    How do I get my AppleID to work with iCloud? It says that I have a valid ID, but that I can't use it with iCloud... How do I fix this? Thanks!!

  • Load Balancing on a URL with parameters in it.

    Hi, We have two main Server Farms. I have been asked to load balance to each farm based on the url. The problem: The url looks like this https://www.domain.com/test/ci/?par1=Default&par2=main&userRole=userrole&mcId=companyname&par4=somethingelse The

  • Maximum length/size for tracks?

    I have a couple of these white noise mp3 which are really long, like 8 hours (~400MB), and I can play them in iTunes, but they won't synchronize with the iPod. So I was just wondering, maybe there's a limit for the length (or size?) for the file the

  • Binding with a LIKE query

    I am using PHP and ORACLE and am having trouble with binding. I can get a basic bind to work, but I am having trouble with a more complex query like this: $oracle_search_name = 'some input text'; $query1 = "SELECT source_title FROM records WHERE UPPE

  • Smart Zoom in Safari 7/Mavericks?

    After the upgrade to Mavericks Smart Zoom seems not to work in Safari.  Is there a way to re-enable the convenient zooming in of a web page by double tapping my magic mouse?