Hi Guys,
I have a situation where I need to access the column values from rowtype variable. However, the column names are dynamic.
below is sample code:
declare
Cursor c1 is select * from emp;
Cursor c2 is select column_name from xyztable;
v_c2 c2%rowtype;
v_str varchar2
v_value varchar2(200);
begin
for rec in c1
loop
open c2;---this cursor has column names like EMPLOYEE_ID, FIRST_NAME, LAST_NAME etc.
loop
fetch c2 into v_c2;
exit when c2%notfound;
/* now lets say i want to access value of LAST_NAME from cursor c1, so I am writing below code, however it does not work as expected */
v_str:= 'rec.'|| v_c2.column_name; -- this will give me string like "rec.EMPLOYEE_ID"
v_value:=v_str;
end loop;
end loop;
end;
/
Plz help ASAP.Thanks.
Answers were Sorted based on User's Feedback
DECLARE
CURSOR C1 IS SELECT *
FROM DEPT;
CURSOR C2 IS SELECT *
FROM EMP;
v_c2 C2%ROWTYPE;
v_str VARCHAR2(30);
v_res VARCHAR2(35);
BEGIN
OPEN C2;
FOR REC IN C1
LOOP
FETCH C2 INTO v_c2;
EXIT WHEN C2%NOTFOUND;
v_str := 'REC'||v_c2.ENAME;
v_res := V_STR;
DBMS_OUTPUT.PUT_LINE('NAME'||v_c2.ENAME);
END LOOP;
CLOSE C2;
END;
| Is This Answer Correct ? | 1 Yes | 0 No |
Answer / abhishek jee
So what this PL/SQL block is trying to do is post as many records from "emp" table as there are records in "dept" table, i.e., if there are 27 records in "dept" table and 107 records in "emp" table, then the output would show the first 27 records from the "emp" table, isn't that so?
| Is This Answer Correct ? | 0 Yes | 0 No |
What are stored procedures used for?
Explain how to use transactions efficiently : transact sql
Is it important to partition hard disk?
full outer join syntax
What are operators available in sql?
What is dml and ddl?
what is variable in package specification
What are few of the schema objects that are created using PL/SQL?
explain what is mysql? : Sql dba
How do you retrieve the last N records from a table?
Write the sql query using dual table for below output? 1 L R --- --- ---- 1 1 1 1 2 1 1 3 1 1 1 2 1 2 2 1 3 2 1 1 3 1 2 3 1 3 3 Write a query using only Dual table with out writing any pl/sql program.
4. Select sum(A.salary) +sum(B.salary) as TOT_SAL from ( select LEVEL emp_id,level*100 salary,case when mod (level,2)=0then 2 else null end dept_id from dual connect by level<6 )A right outer join (select level emp_id ,level*200 salary ,case when mod (level,3)=0 then 2 else null end dept_id from dual connect by level<6)B On A.dept_id=B.dept_id And A.emp_id=B.emp-id;
Oracle (3259)
SQL Server (4518)
MS Access (429)
MySQL (1402)
Postgre (483)
Sybase (267)
DB Architecture (141)
DB Administration (291)
DB Development (113)
SQL PLSQL (3330)
MongoDB (502)
IBM Informix (50)
Neo4j (82)
InfluxDB (0)
Apache CouchDB (44)
Firebird (5)
Database Management (1411)
Databases AllOther (288)