Passing plsql parm to a sql statement in the procedure database link name
Would like to pass a parm that is the database link name to a stored procedure. I defined this as below. var1 is the name of the db link that I would like to pass
create or replace procedure proc1 (var1 in varchar2) as
cursor c1 is
select num,name,city from emp@var1;
However, this is getting a plsql error in the above code as bad bind variable, db link name expected.
Is there a method to pass a variable within a stored proc into a SQL statement that has a cursor ..
thanks
Hi,
Database links have to be hard-coded. If you really need to specify the database link at run-time, then you need Dyanmic SQL.
Why do you need to do this? How many databases are involved? Do you have new database links all the time? The more you can say about your business requirements, the more helpful we can be.
Are there only a couple of possible database links? If so, you might consider hard-coding each of them, and branching to the appropriate one in your code.
is the real variable here the environment (Development, Test, Production) that you're in? For example, do you need to use one database link in Development, a different one in Test, and a third in Production, but you don't want to change the code when you move from one environment to another? If so, you can try conditional comilation.
Similar Messages
-
Custom SQL statement on the fly
Is it possible to construct dynamic SQL statement in DB adapter on the fly?
One Solution is pass your sql statement to the procedure and fire it from the procedure.
stmt_str := 'INSERT INTO ' || tablename || ' VALUES
(:deptno, :dname, :loc)';
EXECUTE IMMEDIATE stmt_str
USING deptnumber, deptname, location;
refer this thread Dynamic database adapter
--Prasanna -
How to pass the bind variable value to the sql statement of the LOV
Hi,
I am using Forms 10g builder.
I have a text item which will be populated by a LOV when i press a button, but i have a bind variable in the SQL statement of the LOV. That bind variable should be replaced by a value which is derived from a radio group in the same data block.
For Ex: ( )radio1 ( )radio2
before i click on the push button, I'll select one of the radio button above,so my question is how to assign this radio group value to the bind variable in the sql statement in the LOV?
Pl any hint is appreciated!
Thanks
ReddyThe variable can be taken into account in the SELECT order contained in the Record Group used by the LOV.
e.g. Select ... From ... Where column = :block.radio_group ...Francois -
Dynamic SQL statement in a Procedure
Hi,
is it possible to use a variable in place of a column name in a sql statement inside a procedure. Or to create the whole statement as a sql statement and execute it (preferrably with parameters - rather than concatinating the values).
Thanks for any help or direction
ElliotTurns out you can do the following very nicely (dynamic sql with parameterized values)
Declare
id number(10,0);
sql_stmt varchar2(300);
fieldName varchar2(30);
fieldValue varchar2(100);
id := 30;
fieldName := 'somecolumn';
fieldValue := 'some value';
sql_stmt := 'UPDATE myTable SET ' || fieldName || ' = :1 WHERE id = :2';
EXECUTE IMMEDIATE sql_stmt USING fieldValue, id; -
How to trace the SQL statements executed in a database
I am using Oracle9i Enterprise Edition Release 9.2.0.7.0 - 64bit Production on a sun server and I am not familiar with Oracle but with MS SQL there is a tool called profiler, it allows you to monitor and see what is going on in a specific databases whether it is SQL statement executins or anything else. I have installed the oracle enterpise manager console at my windows client and I tried to look for a tool similar to the profiler in the MS SQL. I tried the TRACE DATA VIEWER and I inputed the login credentials but I don' t actually know the service name and I am getting an error ORA-12514 The TSN listener can not resolve the service name given in the connect descriptor. Therefore, am I on the right road so i have to look for the service name or are there any other ways i can trace the currently executing SQL statement in a specific database. I am really stuck there. I would appreciate if somebody help me out. Thanks
Abdel MoalimAbdel Moalim wrote:
I am using Oracle9i Enterprise Edition Release 9.2.0.7.0 - 64bit Production on a sun server and I am not familiar with Oracle but with MS SQL there is a tool called profiler, it allows you to monitor and see what is going on in a specific databases whether it is SQL statement executins or anything else. I have installed the oracle enterpise manager console at my windows client and I tried to look for a tool similar to the profiler in the MS SQL. I tried the TRACE DATA VIEWER and I inputed the login credentials but I don' t actually know the service name and I am getting an error ORA-12514 The TSN listener can not resolve the service name given in the connect descriptor. Therefore, am I on the right road so i have to look for the service name or are there any other ways i can trace the currently executing SQL statement in a specific database. I am really stuck there. I would appreciate if somebody help me out. Thanks
Abdel MoalimHi
I see others have answered the network connectivity issues, I'll try and address the tracing issue. Your best bet is to review http://www.petefinnigan.com/ramblings/how_to_set_trace.htm for the many ways in which a sessions SQL and indeed other activity can be traced. In version 7 (which I'm guessing is yours from the sid) the only profiler available was tkprof (Trace Kernel Profiler) which will do a good job of analysing your trace file. The trace files themselves are generated on the server in a protected directory so you may need to ask your dba for access to them. There are other profilers around now (I have one which runs in v9 and higher database at http://www.niall.litchfield.dial.pipex.com/SimpleProfiler/SimpleProfiler.html which will analyse your files for example) but tkprof is the start point - or else just reading the trace file in a text editor. There is also a utility written by the Oracle Apps guys trcanalyzer that will do a good job for you. In general the interface is poor compared with the ms utility but the information is deeper and more helpful
Niall Litchfield
http://www.orawin.info/ -
XmlAgg Order By in SQL Statement vs Stored Procedure - 9.2.0.3.0
Hi All,
I'm having a problem with the XMLAgg function's ORDER BY clause after upgrading to 9.2.0.3.0.
I'm finding that I can succesfully execute a SQL statement with the XMLAgg ORDER BY clause, but cannot compile a stored procedure using ORDER BY. Below are two examples executing against the SCOTT Schema. They use the same code, except one is contained in a procedure.
I'm running 9.2.0.3.0 on Windows XP Pro, SP1
Plain SQL Statement (executes correctly):
SELECT
XMLElement("test",
XMLAgg(
XMLElement("element",
XMLAttributes(Scott.Emp.Ename as "ename", Scott.Emp.Empno as "enum")
) --xmlElement element
ORDER BY Scott.Emp.Ename desc
) --XmlAgg
).getClobVal() --xmlElement test
as TestXML
from Scott.Emp;
Stored Procedure:
create or replace procedure zorder(TestXML OUT clob) is
begin
SELECT
XMLElement("test",
XMLAgg(
XMLElement("element",
XMLAttributes(Scott.Emp.Ename as "ename", Scott.Emp.Empno as "enum")
) --xmlElement element
ORDER BY Scott.Emp.Ename desc
) --XmlAgg
).getClobVal() --xmlElement test
into TestXML
from Scott.Emp;
end zorder;
I get the following errors when attempting to compile the stored procedure:
7 PLS-00306: wrong number of types or arguments in call to 'XMLAGG'
7 PL/SQL: ORA-00904: "XMLAGG": invalid identifier
5 PL/SQL: SQL Statement ignored
Does anybody know why this code executes correctly in a SQL statement, but fails in a procedure? Is the Order By clause not available in a procedure? I need to get this functionality working in the procedure.
Thanks,
BrianA good simple workaround (that doesn't require runtime parsing) is to simply sub-query:
SELECT
XMLElement("test",
    XMLAgg(
        XMLElement(
            "element",
            XMLAttributes(Scott.Emp.Ename as "ename", Scott.Emp.Empno as "enum")
        ) --xmlElement element
    ) --XmlAgg
).getClobVal() --xmlElement test
into TestXML
from (
    SELECT Ename,Empno
    FROM Scott.Emp
    ORDER BY Scott.Emp.Ename desc -
Can the format of a SQL Statement modify the execution time of an SQL statement?
Thanks in advanceIt depends on:
1) What oracle version are you using
2) What do you mean for "format"
For example: if you're on Oracle9i and changing format means changing the order of the tables in the FROM clause and you're using Rule Based Optimizer then the execution plan and the execution time can be very different...
Max
[My Italian Oracle blog|http://oracleitalia.wordpress.com/2009/12/29/estrarre-i-dati-in-formato-xml-da-sql/] -
XML Publisher - can we specify multiple SQL statements in the report?
Hi there,
can we specify multiple SQL statements in the report with XML Publisher?
Regards,
LiviuCould we eventually generate with the Wizards available in XML Publisher desktop 5.6.2 an xml file with a structure like the one given below? The reason is to facilitate creation of the two rowsets. Thanks, Liviu.
<?xml version="1.0" encoding="UTF-8"?>
<DATA>
<ROWSET2>
<ROW2>
<FIELD1>Query1</FIELD1>
<FIELD2>field2</FIELD2>
<FIELD3>field3</FIELD3>
</ROW2>
</ROWSET2>
<ROWSET>
<ROW>
<FIELD1>Query2</FIELD1>
<FIELD2>field2</FIELD2>
<FIELD3>field3</FIELD3>
</ROW>
</ROWSET>
</DATA> -
Expensive SQL Statements of the day?
Hi...
How can i find out Expensive SQL Statements of the day please.?
Our SAP Version is ECC 6.0 on Oracle 10.2.0.4.0
RgdsHi Srinivas,
On ECC 6.0, go to ST04 t-code --> performance --> SQL Cache --> You see SQL Statements where you need to sort by SQL Statements by Total Execution Time(ms).
I have tried on one of my R/3 4.7EE system, ST04n --> Resource COnsumption --> Top SQL Statements --> you will see 50 Top most expensive SQL Statements interms of wait time.
also Read: [Re: Diagnosis of the expensive ABAP programs having database time > 90%;
[Please Read before Posting in the Performance and Tuning Forum;
Regards,
Kanthi Kiran -
Update SQL Statement in the JDBC sender
Hello!
I have a AS400/DB2 table which I am polling for my XI scenario using the JDBC sender adapter.
I would like to know if it is possible to use system variables (data/time) in the UPDATE statement field? This because we would like to timestamp the exact date/time we read a table. (We can use stored procedures, I know, but would preferr not if at all possible.) Or is there another way?
Thanks,
NamHello!
a little more detail:
We have a fairly simple scenario. We are polling the AS400/DB2 table for information using the JDBC sender with a SELECT statement in the SQL query. We take the data, map it and push it into SRM.
Bhavesh: What I meant is that for error handlig purposes we would like to update the polled record with date and time at the same time as we poll. Using the system date/time of the db system would be ideal, but XI time would be just fine to. So wondering if there is any way to pick up the system data/time (of either system) and pass it in the UPDATE statement as system variables or some such.
Nimrod: one question.... how do we do the mapping in the poll? Meaning the polling is the trigger of the whole scenario, so there is no mapping preceding it. I am fairly new to XI, especially the mapping bit, any help or advice appreciated!
Thanks!
Nam -
ORA-00900: invalid SQL statement error in procedure
In procedure we referring only 2 tables
Tables:
1) Edw_orders_ref
2) Change_pl
Condisition:
1) whenever edw_orders_ref.product=change_pl.product and edw_orders_ref.opt=change_pl.opt condisition satisfied then update edw_orders_ref.pl with change_pl.pl column.
2) we pass table name and day values as arguments to the procedure.
3) Based on day column data only we update.
4) Heir day column means partisition values of the table
Procedure is:
create or replace procedure Proc_update_target(P_Day varchar2,p_tablename nvarchar2)
as
TYPE PlCurTyp IS REF CURSOR;
Pl_cv PlCurTyp;
--emp_rec edw_orders_ref%ROWTYPE;
pl_rec Edw_orders_ref.pl%type;
product_rec Edw_orders_ref.product%type;
opt_rec Edw_orders_ref.opt%type;
sql_stmt varchar(3200);
n number:=0;
BEGIN
sql_stmt := 'select lpl.opt,lpl.product,lpl.pl from minddba.change_pl lpl
where exists ( select 1 from '|| p_tablename ||' where '||p_tablename||'.product=lpl.product and '||p_tablename||'.opt=lpl.opt
and '||p_tablename||'.day='||P_Day||' )';
dbms_output.put_line('hi');
OPEN pl_cv FOR sql_stmt ;
LOOP
dbms_output.put_line('hello1');
FETCH Pl_cv INTO pl_rec,product_rec,opt_rec;
EXIT WHEN Pl_cv%NOTFOUND;
dbms_output.put_line('hello');
execute immediate
'update '||p_tablename||' set pl=:rpl
where product=:rproduct
and opt=:ropt
AND day=:day' using pl_rec, product_rec,opt_rec,P_Day;
if Pl_cv%rowcount=10000 then
commit;
end if;
END LOOP;
CLOSE pl_cv;
commit;
exception
when others then
dbms_output.put_line('Error while updating target pl:'||SQLERRM);
end;
it is compile nad debug.
but execution time this error was coming
exec Proc_update_target('20110226','edw_orders_ref')
hi
hello1
hello
Error while updating target pl:ORA-00900: invalid SQL statement
i think in that procedure updata statement is wrong,if any one corect them.Hi,
This are details of table structure and my requirement for that procedure
CREATE TABLE EDW_ORDERS_REF
SO_ID VARCHAR2(20 BYTE) NOT NULL,
SRC_SYS_KY NUMBER(19) NOT NULL,
DAY VARCHAR2(8 BYTE) NOT NULL,
FIN_CLOSE_DT VARCHAR2(8 BYTE) NOT NULL,
SO_LN_ITM_ID VARCHAR2(12 BYTE) NOT NULL,
EXT_EFF_TS VARCHAR2(26 BYTE) NOT NULL,
EFF_FRM_GMT_TS VARCHAR2(26 BYTE) NOT NULL,
CONTRA_FG VARCHAR2(1 BYTE) NOT NULL,
FDW_TRAN_TYPE_CD VARCHAR2(1 BYTE) NOT NULL,
SO4 VARCHAR2(4 BYTE),
SO2 VARCHAR2(2 BYTE),
PUR_AGMT VARCHAR2(20 BYTE),
SF VARCHAR2(6 BYTE),
V_BOX VARCHAR2(18 BYTE),
PL VARCHAR2(30 BYTE),
MCC_CD VARCHAR2(20 BYTE),
OPT VARCHAR2(18 BYTE),
ORDER_UNITS NUMBER(15,3),
SO_OPT_QTY NUMBER(10,3),
SO_DTL_EXT_QT NUMBER(15,3),
ORDER_LIST_LCY NUMBER(18,4),
ORDER_NET_LCY NUMBER(18,4),
ORDER_NET_CLC NUMBER(18,4),
ORDER_LIST_CLC NUMBER(18,4),
CURRENCY_CD VARCHAR2(2 BYTE),
SLS_CHNL_CD VARCHAR2(1 BYTE),
CBN VARCHAR2(20 BYTE),
GEOG_UNIT VARCHAR2(30 BYTE),
PRODUCT VARCHAR2(18 BYTE),
ORDER_NR VARCHAR2(20 BYTE),
ORDER_LINE_NR VARCHAR2(12 BYTE),
LOAD_DT DATE DEFAULT SYSDATE
CREATE TABLE MINDDBA.CHANGE_PL
PRODUCT VARCHAR2(18 BYTE) NOT NULL,
OPT VARCHAR2(3 BYTE) NOT NULL,
PL VARCHAR2(2 BYTE) NOT NULL
1) whenever edw_orders_ref.product=change_pl.product and edw_orders_ref.opt=change_pl.opt condisition satisfied then update edw_orders_ref.pl with change_pl.pl column.
2) we pass table name and day values as arguments to the procedure.
3) Based on day column data only we update.
4) Heir day column means partisition values of the table
When executing this one I got one error like
exec Proc_update_target('20110226','edw_orders_ref');
hi
hello1
hello
ORA-00900: invalid SQL statement -
SQL Statement error - ORA-00903: invalid table name
Hi
I have written a sql script that gets executed from a form within e-business suite. Unfortunately, the script is falling over with an error:
unknown command beginning "MERGE INTO..." - rest of line ignored.
unknown command beginning "USING edop..." - rest of line ignored.
unknown command beginning "ON (elw.ro..." - rest of line ignored.
unknown command beginning "WHEN MATCH..." - rest of line ignored.
For a list of known commands enter HELP
and to leave enter EXIT.
SET ELW.billed_flag = t.billed_flag,
ERROR at line 2:
ORA-00903: invalid table name the actual statement that is causing the issue is:
MERGE INTO edopaif.table1 elw
USING edopaif.tablw2 t
ON (elw.rowid = t.LOAD_WORKING_ROWID)
WHEN MATCHED THEN
UPDATE
SET ELW.billed_flag = t.billed_flag,
ELW.last_bill_generated = t.last_bill_generated,
ELW.last_bill_type = t.last_bill_type,
ELW.load_month = t.load_month,
ELW.BILL_TRANSACTION_ID = t.bill_transaction_id
WHEN NOT MATCHED THEN
INSERT(error_meaning)
VALUES('ROWID error with ins_ptia');The version of e-business suite that we are using is: 11.5.10.2.
The version of the Oracle database that we are using is:
Oracle9i Enterprise Edition Release 9.2.0.6.0 - 64bit Production
PL/SQL Release 9.2.0.6.0 - Production
CORE 9.2.0.6.0 Production
TNS for IBM/AIX RISC System/6000: Version 9.2.0.6.0 - Production
NLSRTL Version 9.2.0.6.0 - Production
Please note that I am able to successfully run the statement directly connected as the APPS schema in the database - the error only occurs when the script is run from the forms front-end (which is really confusing me).
Many thanks
PaulHi
I've modified the script to include only the statement that is erroring and it still errors when executed from the front end application.
Next I re-wrote the statement to use PL/SQL instead of the MERGE statement, to do the update, and the script completes succesfully, i.e.:
DECLARE
CURSOR cu_lw IS
SELECT t.billed_flag,
t.last_bill_generated,
t.last_bill_type,
t.load_month,
t.bill_transaction_id,
t.load_working_rowid
FROM table2 t;
BEGIN
FOR rec_cu_lw IN cu_lw LOOP
UPDATE table1 elw
SET ELW.billed_flag = rec_cu_lw.billed_flag,
ELW.last_bill_generated = rec_cu_lw.last_bill_generated,
ELW.last_bill_type = rec_cu_lw.last_bill_type,
ELW.load_month = rec_cu_lw.load_month,
ELW.BILL_TRANSACTION_ID = rec_cu_lw.bill_transaction_id
WHERE elw.rowid = rec_cu_lw.load_working_rowid;
END LOOP;
END;
/I am still unsure as to why the MERGE statement is failing when executed in the front end, but completes in the backend with no issues at all. Obviously I would prefer to use the MERGE statement instead of PL/SQL to do the update.
Thanks
Paul -
How Can I Retrieve SQL Statement From The User ?
Hi
I want to know, how can I make the user can enter the SQL statement from himself ?? in this code he can't enter it. Only he can display the SQL that i wrote it...
this is my Code:
import java.sql.*;
public class db_testing {
static final String DRIVER = "com.mysql.jdbc.Driver";
static final String DATABASE_URL = "jdbc:mysql://localhost/S204111933";
public static void main(String[] args) {
Connection cn=null;
Statement st= null;
ResultSet rset=null;
try{
Class.forName(DRIVER);
cn=DriverManager.getConnection(DATABASE_URL, "root", "admin");
st=cn.createStatement();
rset=st.executeQuery("select * from employee");
ResultSetMetaData metadata=rset.getMetaData();
System.out.println("The begining: ");
for(int i=1;i<=metadata.getColumnCount();i++)
System.out.print(metadata.getColumnName(i)+"\t");
System.out.println();
System.out.println();
while(rset.next()){
for(int i=1;i<=metadata.getColumnCount();i++)
System.out.print(rset.getObject(i)+"\t\t");
System.out.println();}
catch(Exception e){
e.printStackTrace();
finally{
try{
cn.close();
st.close();
rset.close();
catch(Exception e1){
e1.printStackTrace();
}The following changes in the code will make the user to give the input
import java.sql.*;
public class db_testing {
static final String DRIVER = "com.mysql.jdbc.Driver";
static final String DATABASE_URL = "jdbc:mysql://localhost/S204111933";
public static void main(String[] args) {
Connection cn=null;
Statement st= null;
ResultSet rset=null;
try{
Class.forName(DRIVER);
cn=DriverManager.getConnection(DATABASE_URL, "root", "admin");
// st=cn.createStatement();
// rset=st.executeQuery("select * from employee");
PreparedStatement pstmt=null;
pstmt=cn.prepareStatement("select * from employee where id=?");
pstmt.setInt(1,Integer.parseInt(args[0]));
rset=pstmt.executeQuery();
ResultSetMetaData metadata=rset.getMetaData();
System.out.println("The begining: ");
for(int i=1;i<=metadata.getColumnCount();i++)
System.out.print(metadata.getColumnName(i)+"\t");
System.out.println();
System.out.println();
while(rset.next()){
for(int i=1;i<=metadata.getColumnCount();i++)
System.out.print(rset.getObject(i)+"\t\t");
System.out.println();}
catch(Exception e){
e.printStackTrace();
finally{
try{
cn.close();
st.close();
rset.close();
catch(Exception e1){
e1.printStackTrace();
} -
How to retrieve SQL statement in the CR 2008
I'm using Crystal Reports 2008 in MS Visual Studio 2008, how can i retrieve SQL statement from *.rpt file, i have tried this code, but it doesn't work:
ReportDocument rdReport = new ReportDocument();
rdReport.Load("Reports/EmployeeTest.rpt", OpenReportMethod.OpenReportByTempCopy);
CrystalDecisions.ReportAppServer.Controllers.RowsetController rsController;
CrystalDecisions.ReportAppServer.ClientDoc.ISCDReportClientDocument rdClient = rdReport.ReportClientDocument; // on this line it throws an exception "The ReportClientDocument property can only be accessed when the report is opened using a Report Application Server."
CrystalDecisions.ReportAppServer.DataDefModel.ISCRGroupPath rdGroupPath = new CrystalDecisions.ReportAppServer.DataDefModel.GroupPath();
string temp;
string sql;
rsController = rdClient.RowsetController;
sql = rsController.GetSQLStatement(rdGroupPath, out temp);
maybe i'm doing something wrong ?
thanksHello Ludek,
when I try to get the report from the session I got an error like this (I am using State Server Session mode i.e out proc in my application)
ReportClientDocument 'reportDocument.ReportClientDocument' threw an exception of type 'System.InvalidOperationException' CrystalDecisions.ReportAppServer.ClientDoc.ISCDReportClientDocument {System.InvalidOperationException}
+base {"The ReportClientDocument property can only be accessed when the report is opened using a Report Application Server."} System.SystemException {System.InvalidOperationException}
StackTrace " at CrystalDecisions.CrystalReports.Engine.ReportDocument.get_ReportClientDocument()" string
so is it the problem of not opened with RAS. Does installation of RAS solves the problem, If so Is it a free-ware or needs to be purchased.
Ashok -
Variable database name in SQL Server query using Oracle database link
Hi All,
I have an ApEx 4.1 app running on 11g x64 (11.2.0.1) on Windows Server 2008 x64, and I have some data integration points with a SQL Server (2005 and 2008) that I need to establish. I have configured the database link with dg4odbc and it works beautifully... I can execute queries against the SQL Server database without any problems using the database link.
However, there is a scenario where the SQL Server database name is dynamic, and I need to generate it on the fly in a PL/SQL block, and then use that in a dynamic SQL query (all of this in ApEx). This is where I run into problems... when I am querying the default database based on the ODBC connection and I don't have to specify the database name, there is no issue. But when I need to access one of several other non-default databases, I keep receiving the "invalid table" error.
This runs fine:* (note that "fv" is the name of my database link)
v_query1 := 'select "ReleaseDate" from dbo.Schedules@fv where dbo.Schedules."SchedID" = :schedule';
EXECUTE IMMEDIATE v_query1 into rel_date using schedule;
I then take that rel_date variable, convert to a varchar2 (rel_date_char), and then use it as the database name in the next query...
This returns an error_ (Error ORA-00903: invalid table name)
v_query2 := 'select "PARTNO" from :rel_date_char.dbo.ProdDetails@fv where "SchedID" = :schedule and "UnitID" = :unit
and "MasterKey" = :master and "ParentKey" = :parent';
EXECUTE IMMEDIATE v_query2 into part_number using schedule, unit, master, parent;
I have also tried using all of the following to no avail:
'select "PARTNO" from ' || :rel_date_char || '.dbo.ProdDetails@fv where "SchedID"...
'select "PARTNO" from ' || rel_date_char || '.dbo.ProdDetails@fv where "SchedID"...
'select "PARTNO" from ' || @rel_date_char || '.dbo.ProdDetails@fv where "SchedID"...
'select "PARTNO" from @rel_date_char.dbo.ProdDetails@fv where "SchedID"...
Is there a way to do this in PL/SQL?
Thanks for any help!
-Ian C.
Edited by: 946532 on Jul 15, 2012 7:45 PMJust did a test using passthrough:
SQL> set serveroutput on
SQL> declare
2 val varchar2(100);
3 c integer;
4 nr integer;
5 begin
6 c:= dbms_hs_passthrough.open_cursor@FREETDS_DG4ODBC_EMGTW_11_2_0_3;
7 dbms_hs_passthrough.parse@FREETDS_DG4ODBC_EMGTW_11_2_0_3 (c, 'select count(*) from EMP');
8 LOOP
9 nr:= DBMS_Hs_Passthrough.fetch_row@FREETDS_DG4ODBC_EMGTW_11_2_0_3(c);
10 exit when nr=0;
11 dbms_hs_passthrough.get_value@FREETDS_DG4ODBC_EMGTW_11_2_0_3(c,1,val);
12 dbms_output.put_line(val);
13 end loop;
14 dbms_hs_passthrough.close_cursor@FREETDS_DG4ODBC_EMGTW_11_2_0_3(c);
15 end;
16 /
24576
PL/SQL procedure successfully completed.
SQL> declare
2 val varchar2(100);
3 c integer;
4 nr integer;
5 begin
6 c:= dbms_hs_passthrough.open_cursor@FREETDS_DG4ODBC_EMGTW_11_2_0_3;
7 dbms_hs_passthrough.parse@FREETDS_DG4ODBC_EMGTW_11_2_0_3 (c, 'select count(*) from dbo.EMP');
8 LOOP
9 nr:= DBMS_Hs_Passthrough.fetch_row@FREETDS_DG4ODBC_EMGTW_11_2_0_3(c);
10 exit when nr=0;
11 dbms_hs_passthrough.get_value@FREETDS_DG4ODBC_EMGTW_11_2_0_3(c,1,val);
12 dbms_output.put_line(val);
13 end loop;
14 dbms_hs_passthrough.close_cursor@FREETDS_DG4ODBC_EMGTW_11_2_0_3(c);
15 end;
16 /
24576
PL/SQL procedure successfully completed.
So all 3 ways work for me.
Edited by: kgronau on Jul 23, 2012 10:08 AM
Now using variables to perform the select:
SQL> declare
2 val varchar2(100);
3 c integer;
4 nr integer;
5 tabname varchar2(20) :='EMP';
6 ownr varchar2(20) :='dbo';
7 dbname varchar2(20) :='gateway';
8 begin
9 c:= dbms_hs_passthrough.open_cursor@FREETDS_DG4ODBC_EMGTW_11_2_0_3;
10 dbms_hs_passthrough.parse@FREETDS_DG4ODBC_EMGTW_11_2_0_3 (c, 'SELECT count(*) FROM '||dbname||'.'|| ownr || '.'||tabname||'');
11 LOOP
12 nr:= DBMS_Hs_Passthrough.fetch_row@FREETDS_DG4ODBC_EMGTW_11_2_0_3(c);
13 exit when nr=0;
14 dbms_hs_passthrough.get_value@FREETDS_DG4ODBC_EMGTW_11_2_0_3(c,1,val);
15 dbms_output.put_line(val);
16 end loop;
17 dbms_hs_passthrough.close_cursor@FREETDS_DG4ODBC_EMGTW_11_2_0_3(c);
18 end;
19 /
24576
PL/SQL procedure successfully completed.
=> instead of executing the statement using "execute Immediate" we have to use PASTHROUGH package to pass the statement to the SQL Server.
Edited by: kgronau on Jul 23, 2012 10:10 AM
Maybe you are looking for
-
Changes are not getting reflected in Process Chain after changes.
Hello, I have modified a Process Chain in Development environment. I have created one new infopackage and included it in the process chain. I have also added two new change run variants in the process chain. I have collected the process chain and inf
-
I cannot get Itunes to install to my windows 7 PC. Every time I try i get an error saying "apple application support was not found" "Apple Application Support is required to run ITunes. Please uninstall ITunes, then install ITunes again. Error 2 Wi
-
Delete overlaping requests doesnt work with delta
Hello I need to delete previous request delivered by delta DTP. Process type "Delete overlaping requests from cube" doesnt allow to select delta DTP. Is it only for full load DTP? Alex
-
Software update "can't connect to host"
DC G5 10.4.4 SU refuses to cooperate from CL I get DC-G5:~ bobhenry$ softwareupdate -l Software Update Tool Copyright 2002-2005 Apple 2006-01-20 14:14:04.597 softwareupdate[464] loader:didFailWithError:NSError "can't connect to host" Domain=NSURLErro
-
i cant play fifa 14 in my lenovo g400s which has 2gb graphics .i have installed all the setup files and all but when i try to open the game it doesn't show even a dialog box.i don't know what the problem is .please help me Moderator comment: Subject