Help w/ dynamic sql in form based on proc.
First, I'm not the most brilliant at this so I might be missing something basic.
I have a form based off a stored procedure. In that procedure, I have an update statement that is built dynamically from session variables. It won't work because I am putting the update statement together from variables. How can I get around this?
example:
Here is the problematic code in my procedure:
update my_schema.my_table_synonym
set
v_myfield = v_myvar
where myid = v_myid;
I am pulling the variables from session storage I created earlier in the application. It doesn't seem to like that the field is a variable... is there a way to do this? I would prefer to use this in my application dozens of times rather than copy it dozens of times with slight changes.
ok, nevermind... I figured my problem out.
All I needed was something like this:
v_sql := 'update mytable set ' || myfield || ' = ''HELLO';
EXECUTE IMMEDIATE v_sql;
Similar Messages
-
Dynamic SQL in Form Builder 6.0
Hai,
I would like to know how to create Dynamic SQL in Form Builder 6.0. I'am using oracle 9i database...Please help me.....I studied the EXEC_SQL and i wrote these syntax(below), but it gives me error...Could you help me please......:
PROCEDURE Dynamic_sql IS
connection_id EXEC_SQL.CONNTYPE;
cursorID EXEC_SQL.CURSTYPE;
sql_string VARCHAR2(1000);
v_pc varchar2 (4);
v_pd varchar2 (30);
v_poc varchar2(4);
v_pvd DATE;
v_pid DATE;
exec_id PLS_INTEGER;
out_file TEXT_IO.FILE_TYPE;
linebuf varchar2(7000);
vchFileName VARCHAR2(100);
Vchfolder VARCHAR2(100);
AppID PLS_INTEGER;
nmbAlert varchar2(50);
BEGIN
SET_APPLICATION_PROPERTY(CURSOR_STYLE,'BUSY');
vchFileName := 'dynamic_sql_'||sysdate||'.txt';
Vchfolder := 'D:\KONS\Damar\';
host('mkdir '||Vchfolder,NO_SCREEN);
out_file := text_io.fopen(vchfolder||vchFileName,'w');
TEXT_IO.PUT_LINE (out_file,'PRODUCT CODE PRODUCT DESC PRODUCT OBJECT CODE PRODUCT VALID DATE PRODUCT INVALID DATE ');
connection_id := EXEC_SQL.OPEN_CONNECTION('FIFDBA/F1FDBA@REPL_DAILY');
cursorID := EXEC_SQL.OPEN_CURSOR(connection_id);
sql_string := 'SELECT PROD_CODE, PROD_DESC, PROD_OBJT_CODE, PROD_VALID_DATE, PROD_INVALID_DATE
FROM HOUS_PRODUCT_TYPE ';
EXEC_SQL.PARSE(connection_id, cursorID, sql_string, exec_sql.V7);
--EXEC_SQL.BIND_VARIABLE(connection_id, cursorID, '', input_empno);
EXEC_SQL.DEFINE_COLUMN(connection_id, cursorID, 1,v_pc, 4);
EXEC_SQL.DEFINE_COLUMN(connection_id, cursorID, 2, v_pd, 30);
EXEC_SQL.DEFINE_COLUMN(connection_id, cursorID, 3, v_poc, 4);
EXEC_SQL.DEFINE_COLUMN(connection_id, cursorID, 4, v_pvd);
EXEC_SQL.DEFINE_COLUMN(connection_id, cursorID, 5, v_pid);
exec_id := EXEC_SQL.EXECUTE(connection_id, cursorID);
WHILE (EXEC_SQL.FETCH_ROWS(connection_id, cursorID) > 0 ) LOOP
EXEC_SQL.COLUMN_VALUE(connection_id, cursorID, 1, v_pc, 4);
EXEC_SQL.COLUMN_VALUE(connection_id, cursorID, 2, v_pd);
EXEC_SQL.COLUMN_VALUE(connection_id, cursorID, 3, v_poc);
EXEC_SQL.COLUMN_VALUE(connection_id, cursorID, 4, v_pvd);
EXEC_SQL.COLUMN_VALUE(connection_id, cursorID, 5, v_pid);
TEXT_IO.PUT_LINE(out_file,v_pc || v_pd ||v_poc||v_pvd||v_pid);
--Forms_DDL('INSERT INTO TEMP VALUES('||''''||nRows||' '||v_state_id||''''||')');
--COMMIT_FORM();
END LOOP;
EXEC_SQL.CLOSE_CURSOR(connection_id, cursorID);
EXEC_SQL.CLOSE_CONNECTION(connection_id);
SET_APPLICATION_PROPERTY(CURSOR_STYLE,'DEFAULT');
TEXT_IO.FCLOSE(out_FILE); -
I' d like to use dynamic SQL in Form, but i'm attacking a access database(ODBC OCA).
Is there any way to do that?
Thanks.
nullSEE ALL EXAMPLES
=============
Example 1
** Built-in: FORMS_DDL
** Example: The expression can be a string literal.
BEGIN
Forms_DDL('create table temp(n NUMBER)');
IF NOT Form_Success THEN
Message ('Table Creation Failed');
ELSE
Message ('Table Created');
END IF;
END;
Example 2
** Built-in: FORMS_DDL
** Example: The string can be an expression or variable.
** Create a table with n Number columns.
** TEMP(COL1, COL2, ..., COLn).
PROCEDURE Create_N_Column_Number_Table (n NUMBER) IS
my_stmt VARCHAR2(2000);
BEGIN
my_stmt := 'create table tmp(COL1 NUMBER';
FOR I in 2..N LOOP
my_stmt := my_stmt| |',COL'| |TO_CHAR(i)| |' NUMBER';
END LOOP;
my_stmt := my_stmt| |')';
** Now, create the table...
Forms_DDL(my_stmt);
IF NOT Form_Success THEN
Message ('Table Creation Failed');
ELSE
Message ('Table Created');
END IF;
END;
Example 3:
** Built-in: FORMS_DDL
** Example: The statement parameter can be a block
** of dynamically created PL/SQL code.
DECLARE
procname VARCHAR2(30);
BEGIN
IF :global.flag = 'TRUE' THEN
procname := 'Assign_New_Employer';
ELSE
procname := 'Update_New_Employer';
END IF;
Forms_DDL('Begin '| | procname | |'; End;');
IF NOT Form_Success THEN
Message ('Employee Maintenance Failed');
ELSE
Message ('Employee Maintenance Successful');
END IF;
END;
Example 4:
** Built-in: FORMS_DDL
** Example: Issue the SQL statement passed in as an argument,
** and return a number representing the outcome of
** executing the SQL statement.
** A result of zero represents success.
FUNCTION Do_Sql (stmt VARCHAR2, check_for_locks BOOLEAN := TRUE)
RETURN NUMBER
IS
SQL_SUCCESS CONSTANT NUMBER := 0;
BEGIN
IF stmt IS NULL THEN
Message ('DO_SQL: Passed a null statement.');
RETURN SQL_SUCCESS;
END IF;
IF Check_For_Locks AND :System.Form_Status = 'CHANGED' THEN
Message ('DO_SQL: Form has outstanding locks pending.');
RETURN SQL_SUCCESS;
END IF;
Forms_DDL(stmt);
IF Form_Success THEN
RETURN SQL_SUCCESS;
ELSE
RETURN Dbms_Error_Code;
END IF;
END; -
Need help on Dynamic SQL Cursor in Forms
Hi All,
I am trying to execute Dynamic SQL Cursor in forms using EXEC_SQL built in.
I have a cursor for example:
'select * from supplier where supplier = '||p_supplier||' and processing_order = '||p_order
My code is
cur_num := Exec_SQL.Open_cursor;
sql_order := 'select * from supplier where supplier = '||p_supplier||' and processing_order = '||p_order;
EXEC_SQL.PARSE(cursor_number, sql_order);
EXEC_SQL.DEFINE_COLUMN(cur_num ,1,ln_Supp_Id);
EXEC_SQL.DEFINE_COLUMN(cur_num ,2,ls_Suppl_Name,30);
EXEC_SQL.DEFINE_COLUMN(cur_num ,24,ls_exchange,20);
sql_count := EXEC_SQL.EXECUTE(cur_num );
While EXEC_SQL.FETCH_ROWS(cur_num ) > 0 Loop
EXEC_SQL.COLUMN_VALUE(cur_num ,1,ln_Supp_Id);
EXEC_SQL.COLUMN_VALUE(cur_num ,2,ls_Suppl_Name);
EXEC_SQL.COLUMN_VALUE(cur_num ,24,ls_exchange);
End Loop;
EXEC_SQL.CLOSE_CURSOR(cur_num );
In this case I have to write 24 Define Columns and 24 Column value. Is there any way to assign them to %rowtype at one time as I need all coulmn of the table.
I had similar case on multiple tables.
Please help me
Thanks,
MaddyI need this dynamic sql because p_supplier and p_order values changes at run time
I do not understand. Is this a simplified sample or the real thing? You do know that you can pass variables to cursors:
cursor test is
select * from supplier where supplier = p_supplier and processing_order = p_order;
or does e.g. p_supplier hold other parts of the query?
cheers -
Using database link with a dynamic SQL in Forms 5
I have a Form 5 application where a database link is specified in a client version of dynamic SQL. The function that the application is designed to perform is to access data in a table in a remote database and use it to populate another table in a local database with the same structure as the source table. Dynamic SQL is used because the name of the table can only be resolved during run time.
The problem is that it gives error with code 'ORA-03113' and text 'End-of-file on communication channel' when you try to run it.
Is it not possible to use a database link with a dynamic SQL? What can I do to overcome the problem ?Try to create a local view based ao the remote table and use the view.
-
Using Native Dynamic SQL in Forms
Can Native Dynamic SQL be used in Forms 5.0 or Forms 6.0? (Database 8.1.6.0.0)
I have tried the following code (examples below) from the PL/SQL User's Guide and Reference Release 8.1.6 and the Metalinks Note: 62592.1 and the trigger/procedure (in Forms) will not compile. I appreciate any help given.
Example1:
(I have a table named temp_jane with a column named companies and a value 'Hello'. When compiling, I receive the error: 'Error 103 at line 8, column 11 Encountered the symbol ''IMMEDIATE" when expecting one of the following :=.(@%; ')
declare
str varchar2( 200 );
val varchar2( 20 );
ret temp_jane%rowtype;
begin
str := 'select company from temp_jane where company = :b1';
val := 'Hello';
execute immediate str into ret using val;
message('Value fetched from table: '| |ret.company);
end;
Example2:
(Here is the real issue, I don't know what the select statement, so I need to be able to assign a variable. When compiling, I receive the error: 'Error 103 at line 28, column 21 Encountered the symbol "VSQLSTATEMENT" when expecting one of the following: select ').
declare
type ItemsControlCurTyp is ref cursor;
ItemsCur ItemsControlCurTyp;
ItemsRec Items%rowtype;
vSQLStatement varchar2( 5000 );
vExecuteSQL varchar2( 5000 );
vNumRows integer;
vValue varchar2( 2000 );
vFirstOne varchar2( 1 ) := 'Y';
vRetval varchar2( 2000 );
begin
-- Display the column prompts with the right text.
set_item_property( 'ITEMS_AVAILABLE.NDB_VALUE', PROMPT_TEXT, :ITEMS_CONTROL.AVAILABLE_LABEL );
set_item_property( 'ITEMS_CHOSEN.NDB_VALUE', PROMPT_TEXT, :ITEMS_CONTROL.CHOSEN_LABEL );
-- Save the original version of CHOSEN_STRING in case the user reverts or cancels.
:ITEMS_CONTROL.CHOSEN_STRING_ORIG := :ITEMS_CONTROL.CHOSEN_STRING;
vSQLStatement := :ITEMS_CONTROL.SELECT_STATEMENT;
vExecuteSQL := vSQLStatement;
-- Open the cursor
open ItemsCur for vSQLStatement;Hi JTaylor
You cannot use NDS in Client side (Developer). You have to use DBMS_SQL only.
Regards
A K Srinivasan
Oracle. -
Does anyone know anything about Dynamic SQL not being available in Forms v. 6.0.8.11.3? I trying to use Dynamic SQL for the first time and am having some difficulty. When I try to put my SQL in a function and run it straight into the database through SQLPlus, it works fine, but when trying to compile the code in Forms Builder (in a library), I get compiler errors. Any help would be appreciated...
Thanks!
VanessaWhen I tried to compile the following code in Forms, the compiler error I got was Encountered the symbol "STMT_STR" when expecting one of the following: select. However, when I run it in SQLPlus, it creates the function without any errors.
FUNCTION my_func
return number
is
TYPE DiaryCurTyp IS REF CURSOR;
cur DiaryCurTyp;
stmt_str VARCHAR2(200);
dmonth NUMBER;
dday NUMBER;
BEGIN
stmt_str := 'SELECT dmonth, dday FROM p2_diary
WHERE dmonth = :1';
OPEN cur FOR stmt_str USING '12';
LOOP
FETCH cur INTO dmonth, dday;
EXIT WHEN cur%NOTFOUND;
-- <process data>
END LOOP;
CLOSE cur;
END; -
Dynamic sql and block based on a stored procedure
Hi!
I'm triying to generate a block based on a stored procedure. I want the stored procedure to execute a dynamic sql, but I'm having getting the error "PLS-00455 cursor 'AULOCASLATE' cannot be used in dynamic SQL OPEN statement".
I have the following code:
CREATE OR REPLACE package pkg_f0015 is
type rClieInstSlate is record
(clie_id CMS_CLIENTS.ID%type
,client_nm varchar2(1000)
,cs_no CMS_CLIENTS.CS_NO%type
,dob CMS_CLIENT_NAMES.BIRTH_DT%type);
type tClieInstSlate is table of rClieInstSlate;
type uClieInstSlate is ref cursor return rClieInstSlate;
procedure prLocationSlateQry(
auLocaSlate in out uClieInstSlate, anCsNo in CMS_CLIENTS.CS_NO%type,
avClieNm in varchar2,
avSearchType in varchar2,
avLotyCd in CMS_LOCATION_TYPES.CD%type);
end pkg_f0015;
CREATE OR REPLACE PACKAGE BODY pkg_cms_f0015 is
procedure PRLocationSlateQry( auLocaSlate in out uClieInstSlate,
anCsNo in CMS_CLIENTS.CS_NO%type,
avClieNm in varchar2,
avSearchType in varchar2,
avLotyCd in CMS_LOCATION_TYPES.CD%type) IS
vSelect varchar2(5000);
vAddCond varchar2(1000);
vSupLevel varchar2(50);
begin
vSelect := 'select clie.ID,'||
' CLIENT_NAME,'||
' clie.CS_NO,'||
' clna.BIRTH_DT dob'
' from CMS_CLIENT_NAMES clna,'||
'CMS_CLIENTS clie'||
' where clna.CLIE_ID = clie.ID';
if avSearchType= 'C' then
vAddCond := ' and clie.CS_NO = nvl('||anCsNo||',clie.CS_NO)';
vSelect := vSelect || vAddCond;
open auLocaSlate for vSelect;
end if;
end PRLocationSlateQry;
end;
I wonder if what I want is possibleOK,
Now it works. Previously we had the parameter p_guid declared as RAW, which obviously is not any good. :)
Radovan
Edited by: biciste on Apr 28, 2009 4:57 PM -
Help: FRM-40505 for a FORM based on stored procedures
Hi,
I am working on a FORM based on stored procedures. When it performs a query, it actually returns record, but still comes with the message FRM-40505: ORACLE error: unable to perform query. Any recommendations on the possible coding area to check?
Thank you in advance.
JimmyJimmy,
To base a block on a stored procedure is not a simple task because it depends on the .....
.... stored procedure !
If you do not provide much information (like the famous stored procedure), we could not do anything for you.
As much information you provide, as much chance we have to understand the problem.
Francois -
Hello,
I have the following function that works ok:
CREATE OR REPLACE FUNCTION Get_Partition_Name (sTable VARCHAR2, iImportIndex INTEGER)
RETURN VARCHAR2 IS
cursor c is select A.partition_name from (select table_name, partition_name,
extractvalue (
dbms_xmlgen.
getxmltype (
'select high_value from all_tab_partitions where table_name='''
|| table_name
|| ''' and table_owner = '''
|| table_owner
|| ''' and partition_name = '''
|| partition_name
|| ''''),
'//text()') import_value from all_tab_partitions) A where table_name = sTable and A.import_value = iImportIndex;
sPartitionName VARCHAR(20);
err_num NUMBER;
BEGIN
open c;
fetch c into sPartitionName;
IF c%ISOPEN THEN
CLOSE c;
END IF;
RETURN sPartitionName;
EXCEPTION
WHEN OTHERS THEN
err_num := SQLCODE;
--save error in log table
LOG.SAVELINE(SQLCODE, SQLERRM);
END Get_Partition_Name;
I am trying to replace the cursor statement with dynamic SQL, something like (see below) but it doesn't work any more; I think I am missing some quotes.
CREATE OR REPLACE FUNCTION Get_Partition_Name (sTable VARCHAR2, iImportIndex INTEGER)
RETURN VARCHAR2 IS
TYPE t1 IS REF CURSOR;
c t1;
sSql VARCHAR2(500);
sPartitionName VARCHAR(20);
err_num NUMBER;
BEGIN
sSql := 'select A.partition_name from (select table_name, partition_name,
extractvalue (
dbms_xmlgen.
getxmltype (
''select high_value from all_tab_partitions where table_name=''''
|| table_name
|| '''' and table_owner = ''''
|| table_owner
|| '''' and partition_name = ''''
|| partition_name
|| ''''''),
''//text()'') import_value from all_tab_partitions) A where table_name = :a and A.import_value = :b';
OPEN c FOR sSql USING sTable, iImportIndex;
fetch c into sPartitionName;
IF c%ISOPEN THEN
CLOSE c;
END IF;
RETURN sPartitionName;
EXCEPTION
WHEN OTHERS THEN
err_num := SQLCODE;
--save error in log table
LOG.SAVELINE(SQLCODE, SQLERRM);
END Get_Partition_Name;
Please advise,
Regards,
M.R.Assuming the requirement is to find the partition in the supplied table with the supplied high value and the issue is that dba/all_tab_partitions.high_value is a long, one alternative along the same lines as you've done already is as follows. (I've just used a cursor rather than a function for simplicity of demo).
SQL> var r refcursor
SQL> set autoprint on
SQL> declare
2 ctx dbms_xmlgen.ctxhandle;
3 v_table_name VARCHAR2(40) := 'LOGMNR_USER$';
4 v_value NUMBER := 100;
5 begin
6 ctx := DBMS_XMLGEN.NEWCONTEXT
7 ('select table_name
8 , partition_name
9 , high_value hi_val
10 from dba_tab_partitions
11 where table_name = :table_name');
12 dbms_xmlgen.setbindvalue(ctx,'TABLE_NAME',v_table_name);
13 open:r for
14 with x as
15 (select xmltype(dbms_xmlgen.getxml(ctx)) myxml
16 from dual)
17 select extractvalue(x.object_value,'/ROW/TABLE_NAME') table_name
18 , extractvalue(x.object_value,'/ROW/PARTITION_NAME') partition_name
19 , extractvalue(x.object_value,'/ROW/HI_VAL') hi_val
20 from x
21 , TABLE(XMLSEQUENCE(EXTRACT(x.myxml,'/ROWSET/ROW'))) x
22 where extractvalue(x.object_value,'/ROW/HI_VAL') = v_value;
23 end;
24 /
PL/SQL procedure successfully completed.
TABLE_NAME
PARTITION_NAME
HI_VAL
LOGMNR_USER$
P_LESSTHAN100
100
SQL> I'm sure there are other ways as well. Especially with XML functionality, there's normally many ways to skin a cat. -
Dynamic SQL an Form values in formatted Search
Hi all,
Can I create Dynamically the where clause of a query (for a Formatted Search) finding that into a UDF of another table, and then store all in a Varchar(300) variable and use that variable as parameter of an EXEC?
Sorry for my bad explanation, it takes less time attach the query ...
so here it is:
declare @pol as varchar(8)
set @pol = $[ORDR.U_PolProj]
declare @internal_q NVARCHAR(300)
select @internal_q = T0.U_CondPol
from [@PRG_CEN_POL_PROJ] T0
where Code = @pol
declare @itcode as varchar(100)
set @itcode = $[RDR1.ItemCode]
declare @sql NVARCHAR(300)
select @sql = 'select result = count(ItemCode)
from OITM T0
where T0.ItemCode = ''' + @itcode +
''' and ' + @internal_q
exec(@sql)
Could someone tell me what's wrong with this formatted search?resolved!!! It works
-
Selection screen - search help with dynamic sql query
hey ,
is it possible to change the search help of the selection field ?
when i create the range table i put a data element :
create a range table that consists of this new data element
LT_RANGE_TABLE = WD_THIS->M_HANDLER->CREATE_RANGE_TABLE( I_TYPENAME = 'S_CARR_ID' ).
can i control the search help via the the data element or by other methods ?
i want that when the user press F4 the values that will show is the result of a sql query that i will write .
is it possible ?
thanks
ASA.Hi,
yes it is possible...
This is my test code for say personal number select options...
lt_range_table = wd_this->m_handler->create_range_table(
i_typename = 'PERSNO' ).
add a new field to the selection
wd_this->m_handler->add_selection_field(
i_id = 'PERSNO'
I_VALUE_HELP_TYPE = if_wd_value_help_handler=>CO_PREFIX_SEARCHHELP
I_VALUE_HELP_ID = 'ZHELP_WDA_PERNR' "this is the custom search help we need to create
I_NO_INTERVALS = abap_true
it_result = lt_range_table
i_read_only = read_only ).
do the following:
1) copy the std function module: F4IF_SHLP_EXIT....to ZF4IF_SHLP_EXIT_pernr (in my case i am testing for pernr so my fm
name is like that....obviously it can be anything you want...under the recommended naming convention)
2) look for "STEP SELECT"
STEP SELECT (Select values)
3)write the code as follows:
"NOTE: this is my testing code...but you can build your logic on it....
IF CALLCONTROL-STEP = 'SELECT'.
types: begin of zpri_listing,
pernr type PERSNO,
end of zfund_listing.
DATA: lo_syuname TYPE sy-uname.
data itab type standard table of Zpri_LISTING.
data wa type zpri_listing.
DATA : t_fields LIKE TABLE OF shlp_tab-fielddescr.
DATA : w_fields LIKE LINE OF shlp_tab-fielddescr.
DATA : l_fname TYPE dfies-lfieldname.
IF lo_syuname <> sy-uname. "means we were here before and ITAB is filled...fm retains its data values...unless refresh happens
"this if condition make sure that we do not do this select all the time as long as the same user is logged in...
"a user can press f4 many times...you might want to enhance this logic a little bit more for performance
lo_syuname = sy-uname.
))))))))))))))HERE DO YOUR SELECT(((((((((((((((((((((
select pernr from "sometable" into table itab.
ENDIF.
LOOP AT shlp_tab.
LOOP AT shlp_tab-fielddescr INTO w_fields.
l_fname = w_fields-fieldname.
CALL FUNCTION 'F4UT_PARAMETER_RESULTS_PUT'
EXPORTING
parameter = w_fields-fieldname
OFF_SOURCE = 0
LEN_SOURCE = 0
VALUE =
fieldname = l_fname
TABLES
shlp_tab = shlp_tab
record_tab = record_tab
source_tab = itab
CHANGING
shlp = shlp
callcontrol = callcontrol
EXCEPTIONS
parameter_unknown = 1
OTHERS = 2
ENDLOOP.
ENDLOOP.
IF sy-subrc EQ 0.
callcontrol-step = 'DISP'.
ELSE.
callcontrol-step = 'EXIT'.
ENDIF.
EXIT. "Don't process STEP DISP additionally in this call.
ENDIF.
4) save and activate this function module...
5) go to se11 and create "Elementary srch hlp"....
6) fill out all the necessary fields...i am assuming that you already know how to create the search helps...
look for this field: "Search help exit" and put your function name which you created in the above steps...
in this example i have: ZF4IF_SHLP_EXIT_pernr....
7) create and activate the search help....
hope this helps...i just tested this and it is working for me....
Thanks..
AS... -
How to execute dynamic sql in forms 6i?
Cursor_Handle Integer := DBMS_SQL.OPEN_CURSOR;
Out_Put Integer;
BEGIN
DBMS_SQL.PARSE(Cursor_Handle, Sql_Stmt , dbms_sql.v7);
Out_Put := DBMS_SQL.EXECUTE(Cursor_Handle);
DBMS_SQL.CLOSE_CURSOR(Cursor_Handle);
return true;
END;
this is the procedure i have used. it works fine in server side but not in client side. pls help me to solve this problem.
Advance tanxThe reason your process won't compile is that you are using a package variable, dbms_sql.v7. (Why aren't you using dbms_sql.native?) If you change that variable to a value of 1 it will probably work.
However, Francois is correct -- In Forms, you should be using the Exec_SQL package. It is built for Forms; Oracle does not support using DBMS_SQL from Forms. In fact, if you use Forms Builder 10g connected to Oracle 9i and try to compile, the compiler fails with internal errors. They say it works again if you connect to Oracle 10.
Exec_SQL is identical to DBMS_SQL, except for exception handling. You have to make an additional call to catch the error if an exception occurs: Exec_SQL.Last_Error_Code -
Help with dynamic sql across multiple tables
I have more than one similar table that stores data from different dynamically generated relations:
Following are the scripts to create and populate tables
CREATE TABLE RELATION_1(
SRC NUMBER(38, 0) NOT NULL,
TRG NUMBER(38, 0) NOT NULL,
VALUE NUMBER(38, 0) NOT NULL
CREATE TABLE RELATION_2(
SRC NUMBER(38, 0) NOT NULL,
TRG NUMBER(38, 0) NOT NULL,
VALUE NUMBER(38, 0) NOT NULL
CREATE TABLE RELATION_3(
SRC NUMBER(38, 0) NOT NULL,
TRG NUMBER(38, 0) NOT NULL,
VALUE NUMBER(38, 0) NOT NULL
insert into RELATION_1 values(1, 1, 13);
insert into RELATION_1 values(1, 2, 4);
insert into RELATION_1 values(1, 3, 6);
insert into RELATION_1 values(2, 1, 3);
insert into RELATION_1 values(2, 3, 7);
insert into RELATION_1 values(3, 1, 5);
insert into RELATION_2 values(1, 2, 1);
insert into RELATION_2 values(4, 1, 1);
insert into RELATION_2 values(5, 1, 1);
insert into RELATION_3 values(1, 1, 11);
insert into RELATION_3 values(2, 1, 4);
insert into RELATION_3 values(3, 1, 5);
insert into RELATION_3 values(1, 2, 6);
insert into RELATION_3 values(2, 2, 3);
insert into RELATION_3 values(3, 2, 5);
insert into RELATION_3 values(1, 3, 2);
insert into RELATION_3 values(2, 3, 3);
insert into RELATION_3 values(3, 3, 5);Now, I want to write a SQL that for a set of SRCs (lets say for 1,2,3) give me the top n (let's say top 10) TRGs and the SUM of all the VALUE across all the tables except for RELATION_2, i.e. RELATION_1 and RELATION 3, order by this SUM and exclude those TRGs that have entry for SRC-TRG combination in RELATION_2 table.
Thanks
Edited by: Vasif Shaikh on Sep 21, 2010 2:34 PMI didn't completely understand your requirement, but couldn't you UNION all the tables together? Then you could do your Top-n and sorting etc as if you were working with one table.
-
HELP IN DYNAMIC SQL....PLEASE HELP
upd_str := upd_str||'total_prv_mth_amr = nvl(total_prv_mth_amr,0) '||'+ nvl('||p_upd_prev_mth||',0),';
EXECUTE IMMEDIATE upd_str;
IN THE ABOVE IAM GETTING VALUE ERROR BECAUSE total_prv_mth_amr IS A DATABASE NUMBER COLUMN WHERE AS P_upd_prev_mth IS A VARCHAR2 WHOSE VALUE IS GOT AT RUNTIME. i NEED TO ADD BOTH THESE TOGETHER. HOW DO I DO THAT ?? PLEASE HELP MEI don't think that's the problem. Oracle is quite capable of turning a varchar2 value into a number with a to_number(); it's called implicit conversion. ORA-1722: INVALID NUMBER most likely indicates that p_upd_prev_mth contains data that is not a valid numeric value e.g. letters, spaces, etc.
This is why we should also design a databases so that numeric data is held in a NUMBER column.
Cheers, APC
Maybe you are looking for
-
How to develop Framework Extension for join two tables
Dear developers, My project contains more than 200 maintenance tables. Maintenance tables are very small and less than 100 lines. Maintenance tables mostly associated with a translation table. Translation tables are used for localized texts. Translat
-
Printing a Word document to pdf
Is it possible to directly print a Word document to jpg through Adobe, or do I first have to print it to pdf and then save it as a jpg?
-
How to control junk emails in Outlook 2011
Hi Guys, I have installed MS office 365 on my new Mac Book Pro. I receive lots of junk emails in my outook email. Before I used windows and had Norton Internert Security on my Laptop, was no problem at all. Since I used Mac, I cannot control junk ema
-
Audition 3.0.1 Random Gaps of Silence
Hello, I am having a major problem with Adobe Audition 3.0.1. When recording between 9 and 14 tracks at a time a few of the tracks, not all, will randomly have gaps of silence. Some of the gaps are of different lengths. I have attached a screenshot o
-
Cannot use Toshiba Utilities after removing some dll files
After the use of malwarebyte's anti malware, i have somme dll lost (for ex : mscoreei.dll) and I can not use correctly toshiba utilities. I have trired to reinstall some utilities I have found on the website, but it does not work better. I have reins