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 AMHi,
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 advanceMark,
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 BirchallCould 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
AliciaIs 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,
AM953104 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 ...
-CJHi,
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
-
UCS 1.4 support for PVLAN
Hi all, Cisco advise UCS 1.4 supports PVLAN. But i see the following comment about PVLAN in UCS 1.4 "UCS extends PVLAN support for non virtualised deployments (without vSwitch ) . " "UCS release 1.4(1) provides support for isolated PVLAN support for
-
The SIM card inserted in this iPhone does not appear to be supported. Only compatible SIM cards from a supported Carrier may be used to activate iPhone. Please insert the SIM card that came with your iPhone or visit a supported Carrier's store to rec
-
Self Service Form Approval Process
Hello Gurus, Your help needed urgently! Im using International Global HRMS the self service responsibility, I have a customized form which is being used by the employee to fill in details and then those details need to be approved. So what I wanted t
-
When i turn my ipad on it starts typing uncontrolably, how can i stop it?
I have an ipad 2. When I turn it on it starts typing uncontrollably, and I can't stop it. Obviously this makes it unusable, does anyone know how to stop it so that it is able to be used?
-
Are there any code review tools for WLP 7.x