Substitution variables (DEFINE)

First of all : thanks for this product!!!
It would be appreciated to have the possibility of DEFINEing substitution variables in SQL scripts and to call scripts with their parameters.
Thanks in advance.
null

In iSQL*Plus 9.2 there is a subtle interaction
between the iSQL*Plus interface and SQL*Plus engine
code. Both do some parsing for substitution
variables. See:
http://otn.oracle.com/docs/products/oracle9i/doc_library/release2/server.920/a90842/ch6.htm#1007141
In your example I would remove the DEFINE 'x' and 'y'
variables and just use '&user' and '&password'
everywhere in your script.
-- CJ

Similar Messages

  • 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>

  • Defined variable and substitution variables

    Are both of these internally treated in the same way by the Oracle database?
    for example a defined variable
    DEFINE p_grade = a
    and if I use a substitution variable p_grade
    DECLARE
    p_grade VARCHAR2(10);
    v_name VARCHAR2(10);
    BEGIN
    SELECT last_name
    INTO v_name
    FROM employees;
    WHERE job_id = &p_grade
    END;
    Edited by: user6287828 on Feb 24, 2009 10:52 AM

    Hi,
    What you're calling a "defined variable" is nothing but a substitution variable.
    DEFINE  p_grade = ais just one way of setting the value of the substitution variable p_grade.
    When you later use that variable, for example
    WHERE job_id = &p_gradethere is no way of telling how p_grade got its value (if it has one).
    Avoid using the same name for two different types of variables.
    For example:
    DECLARE
        p_grade VARCHAR2(10);   -- Local variable declared
        v_name VARCHAR2(10);
    BEGIN
        SELECT  last_name
        INTO    v_name
        FROM    employees
        WHERE   job_id = &p_grade;    -- Substitution variable used
    END;In the second line, you are creating a local VARCHAR2 variable called p_grade that is never used. It has nothing to do with the substitution variable p_grade (unless the value of that substitution variable happens to be p_grade,
    DEFINE  p_grade = p_grade)
    If you do use the same name for differnt types of variables, SQL*Plus may keep them straight, but no one else (including you) will.

  • Conditional suppression using substitution variable in Hyperion financial r

    Hi all,
    Is there a way that I can suppress a column using substitution variable in hyperion financial reporting?
    For eg, i want to suppress the column if the value of the substitution variable curr_mnth = jun.
    Is there a way to do this? In conditional suprression dialog box, I dont find this option.
    Please suggest.
    Your response is appreciated.
    Thanks,
    Sirisha.

    Hi Sirisha
    In my earlier reply I think I may have mislead you as I thought that you could set the member name equal to that in a row/column and I've managed to get into a HFR studio session this morning and realised that the conditional suppression only allows you to suppress where member name = 'XXX' (specific text) so that doesn;t meet your requirement.
    Different people will have different ways of achieving what you want and everyones requirements are different. If it helps my preferred way of conditionally suppressing periodic data (for Planning/Essbase) is to add a dynamic calc account member called 'TP-Index' into the database, set up a formula so that each period returns a numeric value from 1 to 12 to match the fiscal/calendar year as required.
    Then in reporting bring the account and period dimensions into rows/columns so that you are able to retrieve data for the TP-Index account and the period as defined in your substitution variable. You can then choose how the suppression works based on a numeric value, commonly you may want to suppress if greater than, e.g. you have a multi-period report where your actual data is to June so you want to suppress everything from July onwards.
    I'm sure that a similar thing could be achieved in HFM as well if that is your underlying system instead of Essbase.
    Does that help?
    Stuart

  • 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>

  • Assign substitution variable to another substitution variable with truncation of value

    I launch a sql*plus .sql script by way of a concurent job. The concurrent job provides a date paramenter to the script.  Job log shows the date passed to scrpit as:
    Arguments
    2013/09/01 00:00:00
    For cosmetic purposes in the ouput's heading, I want to convert/truncate the character string to an end-user format of 2013/09/01.
    Trying to simply change one substitution variable
    (below is not working, but hopefully telegraphs my intention:
    UnDefine Low_date
    Define Low_date = '2013-09-01 00:00:00'
    UnDefine Low_date_10
    Define Low_date_10 = 'yyyy-mm-ds'
    select substr('&Low_Date',1,10) into &Low_date_10 from dual;
    prompt "Variable value is: &Low_date_10"
    WHICH PRODUCES:
    old:select substr('&Low_Date',1,10) into &Low_date_10 from dual
    new:select substr('2013-09-01 00:00:00',1,10) into yyyy-mm-ds from dual
    Error starting at line 8 in command:
    select substr('2013-09-01 00:00:00',1,10) into yyyy-mm-ds from dual
    Error at Command Line:8 Column:55
    Error report:
    SQL Error: ORA-00905: missing keyword
    00905. 00000 -  "missing keyword"
    *Cause:   
    *Action:
    old:prompt "Variable value is: &Low_date_10"
    new:prompt "Variable value is: yyyy-mm-ds"
    "Variable value is: yyyy-mm-dd"
    "I need to get to "Variable value is: 2013/09/01"

    Hi,
    SELECT ... INTO only works in PL/SQL.
    In SQL*Plus, you can use COLUMN ... NEW_VALUE, like this:
    DEFINE  low_date = '2013-09-01 00:00:00'
    COLUMN low_date_10_col        NEW_VALUE  low_date_10
    SELECT  REPLACE ( SUBSTR ( '&Low_Date', 1, 10)
                    )    AS low_date_10_col
    FROM  dual;
    PROMPT  Variable value is: &Low_date_10

  • 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

  • Problem setting the value of a substitution variable in a calc script

    Hi, All.
    I'm trying to update the value of a substitution variable inside an IF statement and I'm having trouble.
    Here's the code:
    *"Jan"(*
    IF  (LoopCounter = 1) &varEntity = "100";
    ENDIF;)
    the error I get back from EAS is:
    Error: 1200336 Error parsing formula for [Jan] (line 54): [(] without [)]

    I know CL knows a lot about HBR, if he's around today... LOL
    As a matter of fact, I just used an HBR (not using Calc Manager till I have to)'s macro functionality to drive fx for different Scenarios in a Planning app. Here's how I call the macro:
              /*     Call the macro mcrFxCoreOutYears for the four fx rate types for ALL 12 months of the year.     */
              FIX(&BudYear)
                   %mcrFxCoreOutYears(Constant)
                   %mcrFxCoreOutYears(Comparable)
                   %mcrFxCoreOutYears(Estimate)
                   %mcrFxCoreOutYears(Actual)
              ENDFIXI pass the Scenarios Constant, Comparable, Estimate, and Actual to the macro mcrFxCoreOutYears. You can apply HBRs against Essbase.
    I believe (I can't remember what exactly -- is it that templates don't accept parameters? That seems hard to believe. Looking at a CM template, that does seem to be the case. Bummer if I'm right.) that Calc Manager BRs have less functionality wrt templates, but I haven't worked with CM for over a year.
    It works really well -- a single place to maintain code and no appreciable performance cost.
    You cannot launch a HBR from a MaxL script but HBRs can be launched from command lines -- this may constrain where you place your automation (it basically has to run off of whatever the EAS server is. You may end up shelling out of MaxL to execute the HBR or even execute scripts across servers -- that does get more complicated.).
    Anyway, if you have any more questions, ask away -- it really is a very powerful component. I will have to look at CM more closely (sooner or later I will lose the HBR vs CM argument and at least need to know if templates support parameters) to see if I'm right on what I wrote above.
    Regards,
    Cameron Lackpour
    P.S. You cannot define an ARRAY in an HBR macro because ARRAY arrayname[value] gets read as a parameter. I ended up declaring the array in the calling HBR.
    P.P.S. I really need to write up the fx approach in a blog post -- it is wicked fast and really easy to use. Too many other posts in the queue already.
    Edited by: CL on Aug 24, 2011 1:48 PM

  • Issue with rule file and Substitution variable

    Hi All,
    I am using Essbase 9.3.3
    I created a rule file with 5 dimensions in which 3 dimensions I defined in columns and two dimensions I gave it as header in data column with comma seperated.
    Among those two dimension members, one is an account member with "/" in it within quotes and other is a substitution variable.
    The member assigned for that Substitution variable has a space in between and is updated within quotes in variables list.
    When I try loading data, I am getting an error saying that two members are not valid.
    Eg: "Tax/Unit",&Scenario is not valid.
    &Scenario - "Budget Q1"
    Can some one please suggest on the issue.
    I am not facing any problem in calc scripts or reports scripts using the substition variable.
    Thanks in advance

    Mark,
    Modifying the default files is dangerous and ill advised. You could always just add a style sheet (inline or linked) to your application that overrides that one setting while you wait on the permanent fix.
    Regards,
    Dan
    http://danielmcghan.us
    http://sourceforge.net/projects/tapigen

  • Using an apostrophe in a substitution variable

    Hello, I have a simple sql plus script which sets a substitution variable and then uses this in an INSERT statement to insert the value of the variable into a database table.
    For example:
    DEFINE TEXT = 'For full details see PQPs website'
    insert into CONSTS(PARAMETER, VALUE, TYPE) values ('admin.marketing.website', '&TEXT1', 'ADMIN');
    That's all fine and dandy.
    However, I want to put a possessive apostrophe in PQPs, i.e. PQP's but can't find a way that lets me do it and I've tried everything I can think of.
    Using the escape character \ doesn't work
    i.e.
    set escape \
    DEFINE TEXT = 'For full details see PQP\'s website'
    I just get the string 'For full details see PQP\'
    Also using two apostrophes doesn't work either
    i.e.
    DEFINE TEXT = 'For full details see PQP''s website'
    I get the error "ORA-01756: quoted string not properly terminated"
    when I try and insert into the database.
    I've tried surrounding the value in double quotes etc. and everything I can think of but for the life of me I can't get a string containing an apostrophe into the database using a substitution variable. It must be possible though, isn't it?
    Thanks
    Andy Birchall

    Could this be a solution ?
    TEST@db102 > var text varchar2(50);
    TEST@db102 > exec :text := 'For full details see PQP'||chr(39)||'s website';
    PL/SQL procedure successfully completed.
    TEST@db102 > insert into CONSTS(PARAMETER, VALUE, TYPE) values ('admin.marketing.website', :text, 'ADMIN');
    1 row created.
    TEST@db102 > select * from consts;
    PARAMETER                      VALUE                                              TYPE
    admin.marketing.website        For full details see PQP's website                 ADMIN
    TEST@db102 >

  • Substitution Variable in DataForm

    Hi All,
    I am using EPM 11.1.1.1.0.
    I am trying to define a member formula for a scenario.
    The formula has a substitution variable in it.When i validate the formula it gives me the following error:
    *Substitution variable [CurMonth] doesn't exist.*+
    Is it that the use of substitution variables is not supported in Member Formulas or am i missing a step to help it recognize the variable...
    Please advice.
    Regards
    Alicia

    Is this an EPMA app, or a Classic app? Is the validation failing in the dimension library of EPMA?
    If it's an EPMA app, variables like this are now maintained in Calc Manager. Go to "Administer", "Calculation Manager". Then select the menu options "Tools", "Variables". Expand your Planning application and you'll see any variables defined for that application listed. If you right-click on the app or database, you can select "new" to create a new variable. Select a type of "Essbase" to create a substitution variable. You'll need to deploy the app before the variable will show up in Essbase.
    Hope this helps,
    - Jake

  • && Substitution Variable in Package Body using SQL Developer

    Hi Folks,
    I've moved over to working to in SQL Developer (its a very early version - 1.0.0) from a combination of SQL*Plus command line and a text editor. I'm trying to get this upgrgraded, but I think the question will be the same with a newer version anyway.
    I am creating a package, and in the package body I have some &&my_var substitutions that I was previoulsy prompted for when calling the .sql from the command line SQL*Plus. I need this as the variable needs to be different for the development and live environment.
    When working in SQL Developer, I can load the package body from Connection->Packages->My Package->My Package Body, and click the edit button to edit the code, however, when I click the Compile button in the top of the window my code error's because of the substituion variablle. An example is:
    CREATE OR REPLACE
    PACKAGE BODY MY_PACKAGE AS
    PROCEDURE MY_PROCEDURE
    BEGIN
    my_variable := &&my_function_from_live_or_dev_database
    END MY_PROCEDURE
    Can anyone tell me if there is a way of defining a compiler variable within the IDE widow while editing a package body stored in the database, without manually copying the code into the Worksheet and running it as a script?
    Thanks,
    AM

    953104 wrote:
    Thanks for the reply, the code was just quickly typed to show the sort of thing I am doing, it wasn't actual code form my project.
    I've come from a C background so what I would have done would be create a #define and changed to when on live or development - or passed the variable to the build environment from the IDE or makefiles and the change would have reflected through my whole project.
    What I want to be able to do is alter a definition of some sort that will reflect throughout my whole project, so I can change it in one location to minimize code changes before going live. I don't really want to be prompted at all. On one system it needs to be DEV_10 and on the other it needs to be LIVE_10.Is there a possibility to elimiante this difference at all?
    For example if DEV_10 is the oracle schemauser on the development database and LIVE_10 would be the one on the production system. THen you could just remove all references to the schema from your code.
    IF you are already connected to this schema, then you don't need to specify the schema name anymore.
    example
    instead of
    create or replace package dev_10.myPackage
    ...you can simply use
    create or replace package myPackage
    ...If needed you can alter the cuurently connected user just before you run the script.
    alter session set current_schema = LIVE10;
    create or replace package myPackage
    ...This would be a different working window in the developer (script worksheet, instead of direct pl/sql editor).
    Substitution variables are allowed there.

  • Substitution Variables in Essbase Load Rules File

    Hi,
    Has anyone tried using substitution variables in Load Rules File Header definition?
    I need to load data based on the Year & I have different Files for 3 Years- CurYr, BudYr1 & BudYr2. Is it allowed to specify the Year Substitution variable in the Rule File Header? I am getting an error while loading.
    Appreciate your thoughts.
    Thanks,
    -Ethan.

    Tim,
    Thanks for the response.
    I figured it out. The error message I was getting was because of some parsing issue. I have defined Year as "FY12" in quotes. I removed quotes & it worked.
    Thank You.
    Ethan.

  • Substitution Variable in Essbase

    Hi Experts,
    In our report script, whenever there is a small change in say Product then we need to update several Rows/code in Report scripts.We were using Rename script for the same like -
    {Rename "ABC"} "testl"
    So, we thought of a solution where we can create say 3 Substitution variables as we have restriction of 255 chars say V1, V2 and V3 substitution variables having this Rename script. and finally create "V" substitution variable = V1+V2+V3
    Is there any possibility of having Substitution variable Value as sum of 3 other existing Substitution variables in Essbase? Say in my Case
    V = V1+ V2+V3
    Please help me out if there is any?

    Hi,
    Your thinking is sound and creative, however due to the way they work you can't define a subvar as a concatenation of other subvars because it will be interpreted literally. e.g.
    sv1 = hello
    sv2 = world
    sv3 = &sv1 + &sv2
    sv3 interpreted by essbase will be: &sv1 + &sv2 and throw an error.
    (If you think about it, concatenating two 255 char subvars into another would still exceed the character liimit.)
    So,
    if you want to concatenate several long subvars, just define them and mash them together:
    &sv1 &sv2 = hello world
    regards,
    Robb Salzmann

  • Substitution Variable in Essbase Report Script

    Hi All,
    In my report script I want to use Essbase Substitution Variable, just as an replacement to Text field... I am using following syntax:
    {STARTHEADING
    TEXT 0 "Bud"
    &StartMonthNo
    TEXT 0 "12"
    ENDHEADING}
    Where StartMonthNo is 1 ... I don't want to add this variable as some member in Essbase, just need to display Heading as
    Bud
    1
    12
    Using above syntax, it is just showing
    Bud
    12
    I have tried many syntax like Text 0 &StartMonthNo or Text 0 "&StartMonthNo" But nothing seems to be working...
    Please lemme know if I am missing something here .. Please give me some suggestions ...
    -CJ

    Hi,
    Your thinking is sound and creative, however due to the way they work you can't define a subvar as a concatenation of other subvars because it will be interpreted literally. e.g.
    sv1 = hello
    sv2 = world
    sv3 = &sv1 + &sv2
    sv3 interpreted by essbase will be: &sv1 + &sv2 and throw an error.
    (If you think about it, concatenating two 255 char subvars into another would still exceed the character liimit.)
    So,
    if you want to concatenate several long subvars, just define them and mash them together:
    &sv1 &sv2 = hello world
    regards,
    Robb Salzmann

Maybe you are looking for