Variable in select statement - Is it possible!
Hello All,
I have a internal table with one column containing table names
Field
RSAABAP
RSATABLE
RSAFGA
I need to read this internal table and write the content of each table on the screen.. like select * from...
My question here is
Is it possible for me to use a statement like
select * from tabname where this tabname is variable which could accomodate the table names like RSAABAP & so on..
Thanks in advance!
Karthik
Yes it is possible:
select *
from ( v_tabname )
into table itab.
where..
Refer the following example:
<i><b>Example
Dynamic specification of the inner joins. The column specification after SELECT is also dynamic.
PARAMETERS: p_cityfr TYPE spfli-cityfrom,
p_cityto TYPE spfli-cityto.
DATA: BEGIN OF wa,
fldate TYPE sflight-fldate,
carrname TYPE scarr-carrname,
connid TYPE spfli-connid,
END OF wa.
DATA itab LIKE SORTED TABLE OF wa
WITH UNIQUE KEY fldate carrname connid.
DATA: column_syntax TYPE string,
dbtab_syntax TYPE string.
column_syntax = `ccarrname pconnid f~fldate`.
dbtab_syntax = `( ( scarr AS c `
& ` INNER JOIN spfli AS p ON pcarrid = ccarrid`
& ` AND p~cityfrom = p_cityfr`
& ` AND p~cityto = p_cityto )`
& ` INNER JOIN sflight AS f ON fcarrid = pcarrid `
& ` AND fconnid = pconnid )`.
SELECT (column_syntax)
FROM (dbtab_syntax)
INTO CORRESPONDING FIELDS OF TABLE itab.
LOOP AT itab INTO wa.
WRITE: / wa-fldate, wa-carrname, wa-connid.
ENDLOOP.</b></i>
Regards,
ravi
Similar Messages
-
Bind Variable in SELECT statement and get the value in PL/SQL block
Hi All,
I would like pass bind variable in SELECT statement and get the value of the column in Dynamic SQL
Please seee below
I want to get the below value
Expected result:
select distinct empno ,pr.dept from emp pr, dept ps where ps.dept like '%IT' and pr.empno =100
100, HR
select distinct ename ,pr.dept from emp pr, dept ps where ps.dept like '%IT' and pr.empno =100
TEST, HR
select distinct loc ,pr.dept from emp pr, dept ps where ps.dept like '%IT' and pr.empno =100
NYC, HR
Using the below block I am getting column names only not the value of the column. I need to pass that value(TEST,NYC..) into l_col_val variable
Please suggest
----- TABLE LIST
CREATE TABLE EMP(
EMPNO NUMBER,
ENAME VARCHAR2(255),
DEPT VARCHAR2(255),
LOC VARCHAR2(255)
INSERT INTO EMP (EMPNO,ENAME,DEPT,LOC) VALUES (100,'TEST','HR','NYC');
INSERT INTO EMP (EMPNO,ENAME,DEPT,LOC) VALUES (200,'TEST1','IT','NYC');
INSERT INTO EMP (EMPNO,ENAME,DEPT,LOC) VALUES (300,'TEST2','MR','NYC');
INSERT INTO EMP (EMPNO,ENAME,DEPT,LOC) VALUES (400,'TEST3','HR','DTR');
INSERT INTO EMP (EMPNO,ENAME,DEPT,LOC) VALUES (500,'TEST4','HR','DAL');
INSERT INTO EMP (EMPNO,ENAME,DEPT,LOC) VALUES (600,'TEST5','IT','ATL');
INSERT INTO EMP (EMPNO,ENAME,DEPT,LOC) VALUES (700,'TEST6','IT','BOS');
INSERT INTO EMP (EMPNO,ENAME,DEPT,LOC) VALUES (800,'TEST7','HR','NYC');
COMMIT;
CREATE TABLE COLUMNAMES(
COLUMNAME VARCHAR2(255)
INSERT INTO COLUMNAMES(COLUMNAME) VALUES ('EMPNO');
INSERT INTO COLUMNAMES(COLUMNAME) VALUES ('ENAME');
INSERT INTO COLUMNAMES(COLUMNAME) VALUES ('DEPT');
INSERT INTO COLUMNAMES(COLUMNAME) VALUES ('LOC');
COMMIT;
CREATE TABLE DEPT(
DEPT VARCHAR2(255),
DNAME VARCHAR2(255)
INSERT INTO DEPT(DEPT,DNAME) VALUES ('IT','INFORMATION TECH');
INSERT INTO DEPT(DEPT,DNAME) VALUES ('HR','HUMAN RESOURCE');
INSERT INTO DEPT(DEPT,DNAME) VALUES ('MR','MARKETING');
INSERT INTO DEPT(DEPT,DNAME) VALUES ('IT','INFORMATION TECH');
COMMIT;
PL/SQL BLOCK
DECLARE
TYPE EMPCurTyp IS REF CURSOR;
v_EMP_cursor EMPCurTyp;
l_col_val EMP.ENAME%type;
l_ENAME_val EMP.ENAME%type;
l_col_ddl varchar2(4000);
l_col_name varchar2(60);
l_tab_name varchar2(60);
l_empno number ;
b_l_col_name VARCHAR2(255);
b_l_empno NUMBER;
begin
for rec00 in (
select EMPNO aa from EMP
loop
l_empno := rec00.aa;
for rec in (select COLUMNAME as column_name from columnames
loop
l_col_name := rec.column_name;
begin
l_col_val :=null;
l_col_ddl := 'select distinct :b_l_col_name ,pr.dept ' ||' from emp pr, dept ps where ps.dept like ''%IT'' '||' and pr.empno =:b_l_empno';
dbms_output.put_line('DDL ...'||l_col_ddl);
OPEN v_EMP_cursor FOR l_col_ddl USING l_col_name, l_empno;
LOOP
l_col_val :=null;
FETCH v_EMP_cursor INTO l_col_val,l_ename_val;
EXIT WHEN v_EMP_cursor%NOTFOUND;
dbms_output.put_line('l_col_name='||l_col_name ||' empno ='||l_empno);
END LOOP;
CLOSE v_EMP_cursor;
END;
END LOOP;
END LOOP;
END;user1758353 wrote:
Thanks Billy, Would you be able to suggest any other faster method to load the data into table. Thanks,
As Mark responded - it all depends on the actual data to load, structure and source/origin. On my busiest database, I am loading on average 30,000 rows every second from data in external files.
However, the data structures are just that - structured. Logical.
Having a data structure with 100's of fields (columns in a SQL table), raise all kinds of questions about how sane that structure is, and what impact it will have on a physical data model implementation.
There is a gross misunderstanding by many when it comes to performance and scalability. The prime factor that determines performance is not how well you code, what tools/language you use, the h/w your c ode runs on, or anything like that. The prime factor that determines perform is the design of the data model - as it determines the complexity/ease to use the data model, and the amount of I/O (the slowest of all db operations) needed to effectively use the data model. -
Getting error after putting variable in select statement
Hi All,
Kindly help me with Pl/sql code
here i'm trying to put variable in select statement ....
I successfully put the Yr and Mnth ..but getting error for loop variable "i"
Here i'm getting error that too because of " i" only-->TRIM(UPPER(TO_CHAR(TO_DATE(i||'-'||Mnth||'-'||Yr,'dd-Mon-YYYY'),'DAY')))
Please find the full code below.
Declare
Yr number not null:=2010;
Mnth varchar2(20) not null:='Jun';
v_val number:=0;
begin
for i in 1..2 loop
case i
SELECT count(*) into v_val
FROM DUAL
WHERE TRIM(UPPER(TO_CHAR(TO_DATE(i||'-'||Mnth||'-'||Yr,'dd-Mon-YYYY'),'DAY')))
in (UPPER('Monday'),UPPER('Tuesday'),UPPER('WEDNESDAY'),UPPER('THURSDAY'),UPPER('friday'))
end case;
end loop;
end;Declare
Yr number not null:=2010;
Mnth varchar2(20) not null:='Jun';
v_val number:=0;
begin
for i in 1..2 loop
SELECT count(*) into v_val
FROM DUAL
WHERE TRIM(UPPER(TO_CHAR(TO_DATE(i||'-'||Mnth||'-'||Yr,'dd-Mon-YYYY'),'DAY')))
in (UPPER('Monday'),UPPER('Tuesday'),UPPER('WEDNESDAY'),UPPER('THURSDAY'),UPPER('friday'));
end loop;
end; -
Passing a variable to select statement
Hi there,
I have a selection screen on which you can choose which table do you want to display.
I store the name of the selected table in a variable tab_name.
I want to use something like that:
data: tab_name(40).
select * from tab_name
into gt_master.
endselect.
But it did not allowed because tab_name is not a database table.
Is it possible to pass the table name in a select statement using a variable?Hello
Yes it is posible you can use a dynamic select...
Try this:
DATA tabname(10).
DATA: BEGIN OF wa,
id TYPE scustom-id,
name TYPE scustom-name,
END OF wa.
tabname = 'SCUSTOM'.
SELECT id name INTO CORRESPONDING FIELDS OF wa FROM (tabname).
WRITE: / wa-id, wa-name.
ENDSELECT.
or
CONSTANTS: flight_tab_name(30) VALUE 'SPFLI'.
DATA: from_clause TYPE STRING.
DATA: BEGIN OF wa,
name(20) TYPE C,
connid TYPE spfli-connid,
END OF wa.
CONCATENATE flight_tab_name ' AS t1'
' JOIN scarr AS t2 ON t1carrid = t2carrid'
INTO from_clause.
SELECT t1connid t2carrname AS name
FROM (from_clause)
INTO CORRESPONDING FIELDS OF wa.
WRITE: / wa-name, wa-connid.
ENDSELECT
Hope this helps
Gabriel -
How to use column name as variable in select statement
hi,
i want to make a sql query where in select statement using variable as a column name. but its not working plz guide me how can i do this.
select :m1 from table1;
regardsHi,
Is this what you want..
SQL> select &m1 from dept;
Enter value for m1: deptno
old 1: select &m1 from dept
new 1: select deptno from dept
DEPTNO
10
20
30
40
SQL> select &m1 from dept;
Enter value for m1: dname
old 1: select &m1 from dept
new 1: select dname from dept
DNAME
ACCOUNTING
RESEARCH
SALES
OPERATIONS
SQL> select &&m1 from dept;
Enter value for m1: loc
old 1: select &&m1 from dept
new 1: select loc from dept
LOC
NEW YORK
DALLAS
CHICAGO
BOSTON
SQL> select &&m1 from dept;
old 1: select &&m1 from dept
new 1: select loc from dept
LOC
NEW YORK
DALLAS
CHICAGO
BOSTONIf you use single '&' then each time you fire the query, It will ask for the new value..
But if you will use double '&&' the value of m1 will be persistent across the session..
Twinkle -
Variable in Select statement JDBC sender
Hi All,
I am working on JDBC sender and this scenario is working fine. Now the legacy system has different enviroment for development, quality and production so I need to change the enviroment for each system.
Is there any way I can make it as variable and the movment it system checks it's development of XI system then it should pick up right enviroment for legacy system and that can be used in select statement.
My select statement looks like and highlighted one is the enviroment which needs to be a variable.
select digits(HMOUTLT) as HMOUTLT, hmprodu as HMPRODU, HMCHKOQ as HMCHKOQ, HMCHKiQ as HMCHKIQ, HMWKPER as HMKPER, HMLSDAT as HMLSDAT from bi5filmm.bsimhp where hmprflg = ' ' and rrn(bsimhp) < 3000 and hmextdt = '2007-12-24'.
I am not sure if value mapping can be used here or not.
regards
Riasolved
-
Using variable in select statement (php)
I am having difficulty using a variable in a select
statement.
The following manual query (using a static date) works fine:
$query_Recordset1 = "SELECT * FROM academyClasses WHERE
classDate > '2006-06-01' ";
However, If I use the following:
$dateVar = date('Y-m-d');
mysql_select_db($database_mw, $mw);
$query_Recordset1 = "SELECT * FROM academyClasses WHERE
classDate > $dateVar ";
ALL records are returned, which means the $dateVar variable
is not being recognized. I have compared the $dateVar values
<?php echo $datetime; ?> against the actual value of my date
field <?php echo $row_Recordset1['classDate']; ?> in my
results table and it seems that the values are indeed accurate in
terms of a date 2006-06-04 for example.
My date field "classDate" is of a "date" type within the
mysql database. I'm using Dreamweaver MX 2004 with Mac OSX 10.3.9.
I'm sure this is just a syntax problem, at least I hope it
is.
Any help is greatly appreciated.On Wed, 7 Jun 2006 04:49:57 +0000 (UTC), "mgwaters"
<[email protected]> wrote:
>Thanks Gary. That did seem to get the select statement
working, but I had to
>enter a manual date as before $dateVar = '2006-06-01'; on
the previous line of
>code to actually get it to filter my records. So... it
looks like my setting of
>the date variable:
> $dateVar = date('Y-m-d');
> does not seem to be recognized within the SELECT
statement.
Try this:
$query_Recordset1 = "SELECT * FROM academyClasses WHERE
classDate>'$dateVar'";
print $query_Recordset1;
See what is in the SQL statement.
Gary -
Storing variable from select statement
I need to store a variable from a select statement into a session. Before I was taken what was passed from another page and throwing it into a session.--
String Password= request.getParameter("Password");
String sql = "Select WEB_USER_ID FROM Web_User WHERE PASSWORD = '" + Password +"'";
session.setAttribute("USER",Password);
Now though I need to put in Web_User_Id and cannot find the proper syntax. Can someone help
session.setAttribute("User",???????);WEB_USER_ID is unidentified because it is a column name, not a variable name. You should first assign its value to a variable and then put the variable name into the setAttribute statement instead.
Your query may return more than one result based on the way it is written. It sounds like you are trying to find all users with a password that is equal to the value of Password. If this is correct, then are you trying to create an attribute for each user?
If your intention is to locate a user, then the user id and password should have been provided. A variable should be defined for both the password and user id. You should then add the user id to the where clause. After a successful search, the attributes can be created using the same syntax. -
Exclude variables in select statement
Hi,
I need to select some values from a column in a table. How do make my select statement such that:
This is INCLUDED from the result:
"Cropland_Stir_high"
While this is EXCLUDED:
"Cropland_Stir_high_with_Structures"
My statement:
select *fromHUCS
whereHUCCODE='01010001'AND
name='Cropland_Stir_high";
Appreciate any help.
Marilyn GamboneGood day deskcheck1,
Since you use the word "include" I am guessing that you want any row that the string include (part of the string is equal to) 'Cropland_Stir_high',
but not those that include 'Cropland_Stir_high_with_Structures'.
In this case you should know the sign % and you can use this query:
select * from HUCS
where HUCCODE='01010001' AND name like '%Cropland_Stir_high%' and not name like '%Cropland_Stir_high_with_Structures%'
You can (and should) learn more about Filter Conditions in this link:
https://msdn.microsoft.com/en-US/library/k58xx95s(v=vs.80).aspx
Ronen Ariely
[Personal Site] [Blog] [Facebook] -
Can we call a stored procedure in a select statement
Hi All
I want to call a stored procedure inside a select statement is this possible.
Regards
SravzYou can create a pipelined function which gathers the data from your stored procedure and then use that in a select statement or directly write your script in any function or pipelined function. ;)
There is no way you can call any stored procedure in a SELECT statement directly - i guess.
Regards.
Satyaki De. -
WHERE clause in SELECT statement
hi experts..
i want to give 'OR' condition in the 'where' clause of 'SELECT' statement.
is it possible?
for examlpe..
IF EXIDV2 IS NOT INITIAL.
SELECT * FROM YSDT_SHIPLOAD
INTO TABLE IG_SHIPLOAD
WHERE EXIDV2 = EXIDV2 AND
VHILM = PC1 OR PC2 OR PC3.
ENDIF.
i want that VHILM should be one of those three.
how can i do this?
thanks..Hi ,
its possible,
Select * from ysdt_shipload int table ig_shipload where exidv2 = exidv2
AND vhilm = pc1
OR vhilm = pc2
OR vhilm = pc3.
OR
Select * from ysdt_shipload int table ig_shipload where exidv2 = exidv2
AND (vhilm = pc1 or vhilm = pc2 or vhilm = pc3).
Regards
Arani Bhaskar
Edited by: arani bhaskar on Mar 16, 2009 5:14 PM -
How to use bind variable in this select statement
Hi,
I have created this procedure where table name and fieldname is variable as they vary, therefore i passed them as parameter. This procedure will trim leading (.) if first five char is '.THE''. The procedure performs the required task. I want to make select statement with bind variable is there any possibility to use a bind variable in this select statement.
the procedure is given below:
create or replace procedure test(tablename in varchar2, fieldname IN varchar2)
authid current_user
is
type poicurtype is ref cursor;
poi_cur poicurtype;
sqlst varchar2(250);
THEVALUE NUMBER;
begin
sqlst:='SELECT EMPNO FROM '||TABLENAME||' WHERE SUBSTR('||FIELDNAME||',1,5)=''.THE ''';
DBMS_OUTPUT.PUT_LINE(SQLST);
OPEN POI_CUR FOR SQLST ;
LOOP
FETCH POI_CUR INTO THEVALUE;
EXIT WHEN POI_CUR%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(THEVALUE);
SQLST:='UPDATE '||TABLENAME|| ' SET '||FIELDNAME||'=LTRIM('||FIELDNAME||',''.'')';
SQLST:=SQLST|| ' WHERE EMPNO=:X';
DBMS_OUTPUT.PUT_LINE(SQLST);
EXECUTE IMMEDIATE SQLST USING THEVALUE;
END LOOP;
COMMIT;
END TEST;
Best Regards,So you want to amend each row individually? Is there some reason you're trying to make this procedure run as slow as possible?
create or replace procedure test (tablename in varchar2, fieldname in varchar2)
authid current_user
is
sqlst varchar2 (250);
thevalue number := 1234;
begin
sqlst := 'update ' || tablename || ' set ' || fieldname || '= ltrim(' || fieldname || ',''.'') where substr(' || fieldname
|| ',1,5) = ''.THE ''';
dbms_output.put_line (sqlst);
execute immediate sqlst;
end test;will update every row that satisfies the criteria in a single statement. If there are 10 rows that start with '.THE ' then it will update 10 rows. -
Is it possible to nest SELECT statements?
Greetings community,
Another newbie’s question it is. Looking tutorials and some posts here I’ve been advised not to pull entire table through the local network, and torture client machines’ processors and memory. It’s been said that better solution is to
pull just one part of the table.
So, imagine this: you want to make a part of your app that would allow your user to view list of orders. So you put one data grid view on the form, pull last 20 headers from the table into it and leave to user to choose one to be opened
in another form. If user doesn’t find header they want, they press page up for example and previous 20 headers are loaded into data grid view. Of course, user could filter headers list by customer, or by distribution lane (having all customers residing in
one part of the town), or whatever more, but let’s not complicate things at this moment, because I’m practically in the beginning.
I’m trying to make a stored procedure that would load penultimate 20 headers when user presses page up. So, not knowing any better, I created table variable that has the same structure as Orders table with one difference: OrderID column,
which is identity (auto incremented) in Orders table, here is simply defined as bigint not null. Community member Visakh16 warned me few months ago it’s the bad practice to put self-incrementing columns in table variables.
At this moment there’s a query on my screen, which waits to become store procedure. After boring part with table variable definition, it goes like this:
INSERT INTO @OrdersTemp SELECT TOP 40 * FROM dbo.Orders ORDER BY OrderID DESC
SELECT TOP 20 * FROM @OrdersTemp ORDER BY OrderID ASC
To put that simply, I pull last 40 headers into table variable, and then pull first 20 from there. This thing works, and I just have to replace 40 with parameter, for every page up or down.
Now I have few questions.
-Is there some better way (considering performance) to achieve that? Here is the place where I wanted to ask the question from the title of the post. I don’t know much about T-SQL, and I’m not sure about the proper syntax to nest SELECT
statements, if something like that is even possible
-Is there any better way (some built-in function) to find about the count of the rows in one table than
SELECT COUNT(OrdersID) FROM dbo.Orders
Thanks for any suggestions.Hi Erland,
Sorry for the very late reply, but I said that I would start another thread when I find more free time to dedicate it to this, so I didn’t really expected you to reply anymore. I didn’t really check here for more than a week, and I glanced
at mail accidentally.
As for the negative result I got, its measurement unit is microsecond, so it doesn’t go out of margins you had experienced.
As for the number of cores, you got me surprised there. I use express edition of SQL server. Last time I checked was SQL server 2012 express, and in specifications it said that express edition is limited to 1 processor core, 1GB of RAM
and creates up to 10GB database file. I don’t believe they changed any of those specifications. It was generous enough when they doubled size of DB file few editions ago. Still, it appears that “one processor core for express edition” statement has some gray
areas in it.
However, at this moment I’m just learning, and I just wanted some way to test how efficient my queries are. I don’t have a real biz problem to solve. I don’t expect that any real performance problem should rise in years of everyday work
of populating database. What I expect is performance impact when it comes to creating reports, but after all, I don’t think that my boss would create reports by himself. I believe that creating reports would be my task, and I will be doing it after hours,
being the only user at the moment. Or maybe I could make de-normalized copy of database that would be populated after hours to make it possible for my boss to get his reports faster by himself, as I’ve heard that was the way of making BI in older non-express
editions.
So, I do suggest that we finally close this thread for sake of other readers. I’ll start another one with this subject when I find the time to do it.
Again, thanks for being with me along this journey. -
Can i include variable in select into statement?
Hi all,
Is it possible to include a variable name in the "select into" statement ? For ex:
"Select empname into variable_Name from employee" In this case variable_Name is the variable.Will this statement work by assigning empname to variable_Name if there is only one record in the employee table?please reply....c ya.Surely you have to? You can hardly SELECT INTO a constant. Perhaps I'm missing something,
-
Bind variables are not used in select statement
Hello all of you,
I have two parameters in Report 6i.
1) Department
2) Section
There are many section in a single department. Both parameters are selected from list. The list for department name is as follows -
select deptname from department_master order by deptname
It works very well. The value is stored in :p_dept_name.
I want to display section of selected department only using following code :-
select sectname from section_master a, department_master b where a.deptcode = b.deptcode and b.deptname = :p_dept_name
The value is stored in :p_sect_name.
But it does not work. bind variables are not allowed in select statement, then how can I do this???
Please suggest me.
Thanx,
Regards,Vikas,
the forum is full of threads about that.
Dependent Parameters in Reports are possible out-of-the-box in Reports.
If you're running your report on the web, have a look at Metalink Note:185951.1
Regards
Rainer
Maybe you are looking for
-
I recently bought 32" Panasonic 720p for the bedroom, I also have my computer set up there as well and I would like to connect it to my G4 MDD FW800 and have a media center set up. The TV has a PC VGA input and my mac has a ATI Radeon 9600 Pro PC Mac
-
Need a little help with an animated JButton.
I have a nice little button that on mouse entry runs a morf animation from one picture to another then stops. On leaving the button it runs the animation in reverse. The animation is done with two GIF images loaded as Icons using ImageIcon. Now this
-
Problems using 1080/50p video files in Premiere CS5 to Encore onto Blu-ray
Firstly apologies if this has been covered, I've searched various forums but not found anything on 1080/50p. I have a Panasonic HDC-TM700 video camera which I only had for a week or so before I went on a weeks holiday in Egypt, so I thought I'd recor
-
I am using Window 7 pro, 64 bit, PowerPoint 2010 and FP 17.The swf files are associated with FP17. I have attempted to add a swf file into PP using both the insert video option along with the Developer method. The insert video option I get a black b
-
Sort Datetime and Varchar Challenge
Hi! I want to sort datetime (converted to varchar) and varchar together , here is test data generation sql. SELECT CONVERT(VARCHAR(10),GETDATE()-3,111) AS TEST_DATE INTO #TMP_TEST INSERT INTO #TMP_TEST SELECT CONVERT(VARCHAR(10),GETDATE()-5,111) INSE