Deciding Column name in UPDATE statement at runtime?
Hi,
Assuming there are 5 columns COLUMN1 through COLUMN5 in TABLE1
In any Update Statement, say:
UPDATE TABLE1 SET COLUMN1='Hi' WHERE COLUMN2='Hello';
Can we decide the COLUMN to bet set at runtime depending on some literal value?
Here in this case, like i get some value in a variable x := 'COLUMN1';, then how can i use an UPDATE statement to following:
UPDATE TABLE1 SET x='Hi' WHERE COLUMN2='Hello';
here x is decided on some logic, i.e. which column is to be updated is decided at runtime.
Please help.
Many thanks in advance.
Hi,
I understood a bit of your code...a 60%..
Better you can see this below example...small and simple example..from this you can understand....and you can solve your problem.. and use of EXECUTE IMMEDIATE...
DECLARE
sql_stmt VARCHAR2(200);
plsql_block VARCHAR2(500);
emp_id NUMBER(4) := 7566;
salary NUMBER(7,2);
dept_id NUMBER(2) := 50;
dept_name VARCHAR2(14) := 'PERSONNEL';
location VARCHAR2(13) := 'DALLAS';
emp_rec emp%ROWTYPE;
BEGIN
EXECUTE IMMEDIATE 'CREATE TABLE bonus (id NUMBER, amt NUMBER)';
sql_stmt := 'INSERT INTO dept VALUES (:1, :2, :3)';
EXECUTE IMMEDIATE sql_stmt USING dept_id, dept_name, location;
sql_stmt := 'SELECT * FROM emp WHERE empno = :id';
EXECUTE IMMEDIATE sql_stmt INTO emp_rec USING emp_id;
plsql_block := 'BEGIN emp_pkg.raise_salary(:id, :amt); END;';
EXECUTE IMMEDIATE plsql_block USING 7788, 500;
sql_stmt := 'UPDATE emp SET sal = 2000 WHERE empno = :1
RETURNING sal INTO :2';
EXECUTE IMMEDIATE sql_stmt USING emp_id RETURNING INTO salary;
EXECUTE IMMEDIATE 'DELETE FROM dept WHERE deptno = :num'
USING dept_id;
EXECUTE IMMEDIATE 'ALTER SESSION SET SQL_TRACE TRUE';
END;
Thanks
Pavan Kumar N
Similar Messages
-
Unknown Column Name "XYZ" not detemined untill runtime.Select query.
Hi,
I have written a query in ABAP.I am getting following error.Can some one help me resolve this.There is a column "LANDX" in standard table T005 of PI which i need to get values from. The problem is that the column is visible only at runtime and not otherwise.How can i fetch data from this coulmn writing a select query for this.
Query written is:
SELECT landx from T005 into table it_t005.
Error:
"Unknown column name "XYZ" not determined untill runtime,you cannot specify a field list."Hi Deepika u were right. that there is a landx field but it is included in that table.
so u cant exactly get it.
now u can get ur country name and iso code just like this.
tables: t005t , t005.
data: BEGIN OF it OCCURS 100,
landx like t005t-landx,
intca like t005-intca,
END OF it.
SELECT t005t~landx t005~intca into CORRESPONDING FIELDS OF TABLE it
from T005t
INNER JOIN t005 on ( t005t~land1 = t005~land1 ).
it is fulfilling ur need.
Edited by: Matt on Feb 3, 2009 7:49 AM - Please don't use txtspk -
How to pass column name in slect statement in query
hi,
i want to make a report where in query select statement using variable as a column name. but its not working plz guide me how can i do this.
i have created a function which return column name through variable & that variable i want to to use in select statement
select :m1 from table1;
regardsHi,
Create a user parameter (say P_field), and assign a valid field name as initial value (say NAME), And In the Query, write
SELECT CODE, &P_field FN_FIELD FROM <table_name> WHERE <condition>And in the BEFORE PARAMETER FORM Trigger under the Report Triggers, write,
function BeforePForm return boolean is
begin
:P_field := <your_function_call>;
return (TRUE);
end;And use that FN_FIELD field in the report.
Hope this will clear your issue.
Regards,
Manu. -
Update multiple columns with single update statement..
HI all,
i am reading the columns value from different table but i want to update it with signle update statement..
such as how to update multiple columns (50 columns) of table with single update statement .. is there any sql statement available i know it how to do with pl/sql..As I understood, may be this. Here i am updating ename,sal, comm columns all at once.
SQL> select * from emp where empno=7369;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7369 SMITH CLERK 7902 17/12/1980 12:00:00 800 20
SQL> UPDATE emp
2 SET ename = lower (ename),
3 sal = sal + 1000,
4 comm = 100
5 WHERE empno = 7369;
1 row updated.
SQL> select * from emp where empno=7369;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7369 smith CLERK 7902 17/12/1980 12:00:00 1800 100 20
SQL> UPDATE emp
2 SET ename = (SELECT 'ABCD' FROM DUAL),
3 sal = (SELECT 1000 FROM DUAL),
4 comm = (SELECT 100 FROM DUAL)
5 WHERE empno = 7369;
1 row updated. -
Use table name in UPDATE statement as variable
Hi All,
I am using ORACLE 9i AIX base. I want to write following procedure:
PROCEDURE update_header (
p_care_msg_nbr IN NUMBER,
p_care_msg_id IN NUMBER,
p_care_msg_gkey IN NUMBER,
p_old_status IN VARCHAR2,
p_new_status IN VARCHAR2
IS
l_table varchar2(50);
BEGIN
l_table := 'CARE_EDI_MESSAGES';
UPDATE '&l_table'
SET status = p_new_status,
changed = sysdate,
changer = user
WHERE care_msg_no = p_care_msg_nbr
AND care_msg_id = p_care_msg_id
AND gkey = p_care_msg_gkey
AND status = p_old_status;
END;
I want to give the table name by passing value in a variable or parameter. Is it the write way or can I do this function in any other way.
Pleae tell me in urgency.
Thanks & Regards
Hassan RazaThis implies that you have several tables with identical or near identical structures, otherwise you will get errors if any of the mentioned columns do not exist in the table passed but ...
You cannot use a substitution variable that way. Oracle will ask for a value when you try to create the procedure, and compile what ever value you supply into the procedure viz.
SQL> CREATE PROCEDURE p AS
2 l_id NUMBER;
3 BEGIN
4 SELECT id INTO l_id FROM &t;
5 END;
6 /
Enter value for t: T
old 4: SELECT id INTO l_id FROM &t;
new 4: SELECT id INTO l_id FROM T;
Procedure created.
SQL> SELECT text FROM user_source WHERE name = 'P'
2 ORDER BY line;
TEXT
PROCEDURE p AS
l_id NUMBER;
BEGIN
SELECT id INTO l_id FROM T;
END;Even if that is the effect you want, note that there are no quotes around the substitution variable in the CREATE statement.
If you want to be able to pass the name of the table to the procedure, then you need to make the table name a parameter, then build the sql statement and execute it using EXECUTE IMMEDIATE. Something more like:
PROCEDURE update_header (p_care_msg_nbr IN NUMBER,
p_care_msg_id IN NUMBER,
p_care_msg_gkey IN NUMBER,
p_old_status IN VARCHAR2,
p_new_status IN VARCHAR2,
p_table IN VARCHAR2) IS
l_sqlstr VARCHAR2(4000);
BEGIN
l_sqlstr := 'UPDATE '||p_table||' SET status = :b1 '||
'changed = sysdate, changer = user '||
'WHERE care_msg_no = :b1 and care_msg_id = :b3 and '||
'gkey = :b4 and status = :b5';
EXECUTE IMMEDIATE l_sqlstr
USING p_new_status, p_care_msg_nbr, p_care_msg_id, p_care_msg_gkey, p_old_status;
END;HTH
John -
Variable as table name in update statement
Hi everyone,
I am trying to update a table whose name is based on bind variables in the form and is unknown until runtime. However, I haven't been able to find a way to do this. I'm currently trying the FORMS_DDL built-in, but no success here either. Has anyone ever done this?
DECLARE
matrix_temp_table VARCHAR2(50);
BEGIN
matrix_temp_table := 'TEMP_'||:mgmt_matrix_master.div_idkey||'_'||TO_CHAR(:mgmt_matrix_master.dept_idkey);
FORMS_DDL('UPDATE '||matrix_temp_table||' SET create_date = :mgmt_matrix_master.create_date');
END;You're right, issuing the statement using the table name itself only works outside of FORMS_DDL. After trudging through the documentation it seems the best way to accomplish what I am trying to do is by using the EXEC_SQL package. But, once again, I cant get this to work either. It seems to me what I am trying to do is a fairly simple thing, but apparently not. I'm now trying to use this code, but the table still isn't being updated.
PROCEDURE update_matrix_temp_table IS
matrix_temp_table VARCHAR2(50);
update_connid EXEC_SQL.ConnType;
update_cursor EXEC_SQL.CursType;
ignore PLS_INTEGER;
BEGIN
matrix_temp_table := 'TEMP_'||:mgmt_matrix_master.div_idkey;
update_connid := EXEC_SQL.CURR_CONNECTION;
update_cursor := EXEC_SQL.OPEN_CURSOR(update_connid);
EXEC_SQL.PARSE(update_connid, update_cursor, 'UPDATE '||matrix_temp_table||' SET emp_no = '||:mgmt_matrix_master.emp_no);
ignore := EXEC_SQL.EXECUTE(update_connid, update_cursor);
EXEC_SQL.PARSE(update_connid, update_cursor, 'COMMIT');
ignore := EXEC_SQL.EXECUTE(update_connid, update_cursor);
EXEC_SQL.CLOSE_CURSOR(update_cursor);
EXCEPTION
WHEN EXEC_SQL.PACKAGE_ERROR THEN
IF EXEC_SQL.LAST_ERROR_CODE(update_connid) != 0 THEN
Message('ERROR (source: ' ||TO_CHAR(EXEC_SQL.LAST_ERROR_CODE(update_connid))|| '): ' ||EXEC_SQL.LAST_ERROR_MESG(update_connid));
END IF;
END; -
Cannot use alias for dynamic column name in SELECT statement
Hi,
I want to retrieve values from several tables by using dynamic column & table name as below:
DATA: tbl_name(30) TYPE c VALUE '/bic/tbi_srcsys', " staticly initialized for this example
col_name(30) TYPE c VALUE '/bic/bi_srcsys'. " staticly initialized for this example
SELECT (col_name) INTO CORRESPONDING FIELDS OF TABLE it_values FROM (tbl_name).
The internal table "it_values" does not contain a field named "/bic/bi_srcsys", instead it has another generic field "value" so that the above code can be applied to other tables. I tried to use alias (AS) as below:
SELECT (col_name) AS value INTO CORRESPONDING FIELDS OF TABLE it_values FROM (tbl_name).
But this cannot work. I know that there are other ways to solve this problem, such as by using a single field in SELECT .. ENDSELECT and subsequently appending it to the work area and internal table as below:
SELECT (col_name) INTO (lv_value) FROM (tbl_name).
wa_value-value = lv_value.
APPEND wa_value TO it_values.
ENDSELECT.
Just wonder if there is any other more elegant workaround, because I might have several other fields instead of only one?
Thanks.
Regards,
Joon MengHi Suhas,
thanks for the quick reply.
Sorry that I have not well described the structure of the internal table "it_values". This internal table contains several other fields (key, type, value, etc.).
I guess that the following code
SELECT (col_name) INTO TABLE it_values FROM (tbl_name).
works if the internal table only has one field (value) or the field "value" is in the first position, right?
In this case, I need to fill the "value" field of internal table it_values (ignore the other fields like type, key) with values retrieved from (col_name) of the DDIC table.
Looking forward to your reply.
BR,
Joon Meng -
The column name "PERNR" has two meanings. ABAP/4 Open SQL statement.
Hi All,
Could anyone advise on what are the error I encountered at below code.
I get the error in " The column name "PERNR" has two meanings. ABAP/4 Open SQL statement." . This errors happen to all the key fields I have selected in below code (eg: pernr, subty, objps, sprps, begda, endda, seqnr).
The field zeih also encountered error in "Unknown column name "ZEIH". not determined until runtime, you cannot specify a field list."
SELECT pernr
subty
objps
sprps
begda
endda
seqnr
zlsch
ZEIH
SELECT * INTO CORRESPONDING FIELDS
OF TABLE i_pa0009
FROM pa0001 INNER JOIN pa0009
ON pa0001pernr = pa0009pernr
WHERE bukrs IN s_code AND
banks NE space.Hi,
In this query
SELECT pernr
subty
objps
sprps
begda
endda
seqnr
zlsch
ZEIH
if you have used joins and if both the database pa0001, pa0009 has the above mentioned fields you will get the error message as the control gets confused as to which table of the field you are referring to..., instead use them in this way
SELECT pa0001~pernr
for each field mention to which table it belongs and ~ before the field name in the above fashion, this will remove the error
Regards,
Siddarth -
Update statement getting ORA-00904 invalid identifier
I am getting this ORA error when I try to conduct an update statement from a column value in one table to a like-named column in another table.
For instance, in my select, shown below, this query runs like a champ, returning all of my records
SELECT
b.ID,
b.ZIP, a.ZIP,
a.NAME,
a.LOCATION
FROM TBL_ARCHIVE a
INNER JOIN TBL_UAT b ON
a.ID = b.ID
WHERE
b.ID > 470000 And b.ID <470100;However, if I try to run an update statement with any of the following, I get this error. It seems so strange to me that I'd get an error using the same columns in the update statement, but would return the desired results effectively from the select statement!
one version of UPDATE
UPDATE TBL_ARCHIVE a
SET a.ZIP = TBL_UAT.ZIP
WHERE TBL_UAT.ID = a.ID;and another
UPDATE TBL_ARCHIVE
SET a.ZIP =
(SELECT b.ZIP
FROM TBL_UAT b
WHERE b.ID <472500 And b.ID >471000)
FROM TBL_ARCHIVE a
WHERE a.ID = b.ID)
WHERE ID IN
(SELECT ID
FROM TBL_UAT b
WHERE b.ID <472500 And b.ID >471000
);^ - this one produces a SQL not properly ended. Error ORA-00933: SQL command not properly ended.
I'm really unsure though, how what I thought was a fairly basic update statement wouldn't work. I'm using Oracle 11g but through either Toad or SQL Plus. I've gotten these same errors in both.
Though MS Access runs slow as snails, I can manage to run the update statement successfully with it, a thousand records or so at a time. Problem is, I've got about 300K records needing updating.
I've looked around for similar problems but haven't found one where someone wasn't either using a reserved word for a column, which I'm not, I don't believe, or a problem that really dealt with this error in the context of an update statement.
But I'd welcome any enlightenment on this.rp0428 wrote:
UPDATE TBL_ARCHIVE a
SET a.ZIP = TBL_UAT.ZIP
WHERE TBL_UAT.ID = a.ID;That isn't a valid query and neither is the other one.
Please post the actual query you are using and the actual complete error message you are getting (everything about the error that is displayed).^^
That is NOT a valid query?
How else would you have an UPDATE statement created to set the value of a column in table A to the value of a (in this case, same named) column in table B?
And keep them in order to update the records appropriately?
I'll append the create statements momentarily.
Thanks!
CREATE TABLE TBL_UAT
( ID NUMBER(6),
ZIP VARCHAR2(10 BYTE) ) and
CREATE TABLE TBL_ARCHIVE
( ID NUMBER(6) NOT NULL, NAME VARCHAR2(50 BYTE),
EMAIL VARCHAR2(50 BYTE),
LOCATION VARCHAR2(50 BYTE),
DEPARTMENT VARCHAR2(50 BYTE),
PRIORITY VARCHAR2(50 BYTE),
APPROVING_MGR_NAME VARCHAR2(50 BYTE),
TYPE1 VARCHAR2(50 BYTE),
TYPE2 VARCHAR2(50 BYTE),
CONTACT_NAME VARCHAR2(50 BYTE),
CONTACT_PHN_NO VARCHAR2(50 BYTE),
LOAN_NUM VARCHAR2(50 BYTE),
REF_ID VARCHAR2(50 BYTE),
BORROWER_NAME VARCHAR2(50 BYTE),
ADDRESS VARCHAR2(50 BYTE),
CITY VARCHAR2(50 BYTE),
ST VARCHAR2(50 BYTE),
ZIP VARCHAR2(10 BYTE),
SALE_DATE DATE,
COMMENTS VARCHAR2(800 BYTE),
TIME_REQ DATE,
ACCTLOC VARCHAR2(50 BYTE),
OTHER_ACCTLOC VARCHAR2(50 BYTE)) Hope this can be of assistance.
Thanks, folks!
Edited by: user515689 on Feb 7, 2012 11:59 AM -
Using Oracle Driver 9.0
Why?
Error:
[ C:9031454; S:2112561; T:8185063; D:20/11/02 15:25 ] INSERT INTO
BP_ENTRADA(IN_SIMPAS, CD_ORGAO, CD_VERSAO, CD_CONTRATO, CD_TP_BEM,
CD_TP_FORMA_OP, CD_TP_OPERACAO, DT_INCLUSAO, DT_AQUISICAO, CD_AGENTE,
DT_CONTABIL, CD_UG, CD_ENTRADA) VALUES ('N', '001', 0, NULL, '01', '03',
'01', {ts '2002-11-20 15:25:03.326'}, {ts '2002-11-20 15:25:03.326'},
'000002', NULL, '000001', '0000000006')
[ C:9031454; T:8185063; D:20/11/02 15:25 ] roll back data store transaction
com.linkdata.infra.persistence.PersistenceException:
javax.jdo.JDOFatalDataStoreException:
com.solarmetric.kodo.impl.jdbc.sql.SQLExceptionWrapper: [SQL=INSERT INTO
BP_ENTRADA(IN_SIMPAS, CD_ORGAO, CD_VERSAO, CD_CONTRATO, CD_TP_BEM,
CD_TP_FORMA_OP, CD_TP_OPERACAO, DT_INCLUSAO, DT_AQUISICAO, CD_AGENTE,
DT_CONTABIL, CD_UG, CD_ENTRADA) VALUES ('N', '001', 0, NULL, '01', '03',
'01', {ts '2002-11-20 15:25:03.326'}, {ts '2002-11-20 15:25:03.326'},
'000002', NULL, '000001', '0000000006')] ORA-00904: invalid column name
[code=904;state=42000]
NestedThrowables:
com.solarmetric.kodo.impl.jdbc.sql.SQLExceptionWrapper: [SQL=INSERT INTO
BP_ENTRADA(IN_SIMPAS, CD_ORGAO, CD_VERSAO, CD_CONTRATO, CD_TP_BEM,
CD_TP_FORMA_OP, CD_TP_OPERACAO, DT_INCLUSAO, DT_AQUISICAO, CD_AGENTE,
DT_CONTABIL, CD_UG, CD_ENTRADA) VALUES ('N', '001', 0, NULL, '01', '03',
'01', {ts '2002-11-20 15:25:03.326'}, {ts '2002-11-20 15:25:03.326'},
'000002', NULL, '000001', '0000000006')] ORA-00904: invalid column name
at
com.linkdata.infra.persistence.jdo.PersistenceMediatorImpl.commitTransaction(PersistenceMediatorImpl.java:116)
at
com.linkdata.patrimonio.TestePatrimonio.insert(TestePatrimonio.java:109)
at
com.linkdata.patrimonio.TestePatrimonio.main(TestePatrimonio.java:23)
Caused by: javax.jdo.JDOFatalDataStoreException:
com.solarmetric.kodo.impl.jdbc.sql.SQLExceptionWrapper: [SQL=INSERT INTO
BP_ENTRADA(IN_SIMPAS, CD_ORGAO, CD_VERSAO, CD_CONTRATO, CD_TP_BEM,
CD_TP_FORMA_OP, CD_TP_OPERACAO, DT_INCLUSAO, DT_AQUISICAO, CD_AGENTE,
DT_CONTABIL, CD_UG, CD_ENTRADA) VALUES ('N', '001', 0, NULL, '01', '03',
'01', {ts '2002-11-20 15:25:03.326'}, {ts '2002-11-20 15:25:03.326'},
'000002', NULL, '000001', '0000000006')] ORA-00904: invalid column name
[code=904;state=42000]
NestedThrowables:
com.solarmetric.kodo.impl.jdbc.sql.SQLExceptionWrapper: [SQL=INSERT INTO
BP_ENTRADA(IN_SIMPAS, CD_ORGAO, CD_VERSAO, CD_CONTRATO, CD_TP_BEM,
CD_TP_FORMA_OP, CD_TP_OPERACAO, DT_INCLUSAO, DT_AQUISICAO, CD_AGENTE,
DT_CONTABIL, CD_UG, CD_ENTRADA) VALUES ('N', '001', 0, NULL, '01', '03',
'01', {ts '2002-11-20 15:25:03.326'}, {ts '2002-11-20 15:25:03.326'},
'000002', NULL, '000001', '0000000006')] ORA-00904: invalid column name
at
com.solarmetric.kodo.impl.jdbc.runtime.SQLExceptions.throwFatal(SQLExceptions.java:17)
at
com.solarmetric.kodo.impl.jdbc.runtime.JDBCStoreManager.insert(JDBCStoreManager.java:421)
at
com.solarmetric.kodo.runtime.StateManagerImpl.insert(StateManagerImpl.java:1783)
at com.solarmetric.kodo.runtime.PNewState.flush(PNewState.java:31)
at
com.solarmetric.kodo.runtime.StateManagerImpl.flush(StateManagerImpl.java:372)
at
com.solarmetric.kodo.runtime.PersistenceManagerImpl.flush(PersistenceManagerImpl.java:426)
at
com.solarmetric.kodo.runtime.PersistenceManagerImpl.commit(PersistenceManagerImpl.java:295)
at
com.linkdata.infra.persistence.jdo.PersistenceMediatorImpl.commitTransaction(PersistenceMediatorImpl.java:112)
... 2 moretp_level is an internal column of a content database. Can you check permissions on a restored content database for an account used for web app pool running?
If it will not help, I offer you to create web application in staging/production and then make a copy of a content database from development enviroment and attach it to a newly created web app. -
How to use the updated value in the same update statement
Hello,
I just wonder how to use the updated new value of other column in the same udpate statement. I am using Oracle 11.2, and want to update the two columns with one update statement as following:
create table tb_test (id number(5), tot number(5), mon_tot number(5));
update tb_test set (tot = 15, mon_tot = tot *15) where id = 1;
...I would like to update both tot and mon_tot column, the value of mon_tot shall be determinted by the new value of tot.
Thanks,
Edited by: 939569 on 1-Feb-2013 7:00 AMEdit: example added
SQL> create table tb_test
2 ( id number(5)
3 , tot number(5)
4 , mon_tot number generated always as (tot*15) virtual
5 );
Table created.
SQL> insert into tb_test (id, tot) values (1, 5);
1 row created.
SQL> select * from tb_test;
ID TOT MON_TOT
1 5 75
1 row selected.
SQL> update tb_test
2 set tot = 15
3 where id = 1;
1 row updated.
SQL> select * from tb_test;
ID TOT MON_TOT
1 15 225
1 row selected. -
Dynamic UPDATE statement with parameters for column names.
Hello,
On this* website I read "The SQL string can contain placeholders for bind arguments, but bind values cannot be used to pass in the names of schema objects (table or column names). You may pass in numeric, date, and string expressions, but not a BOOLEAN or NULL literal value"
On the other hand, in this Re: execute immediate with dynamic column name update and many other
posts people use EXECUTE IMMEDIATE to create a dynamic UPDATE statement.
dynSQL:='UPDATE CO_STAT2 CO SET CO.'||P_ENT_B_G_NAME||' = '||P_ENT_E_G_WE||'
WHERE ST IN
(SELECT ST FROM STG_CO_STAT2_TEST CO WHERE
'||P_ST||' = CO.ST AND
CO.'||P_ENT_E_G_NAME||' > '||P_ENT_E_G_WE||' AND
CO.'||P_ENT_B_G_NAME||' < '||P_ENT_E_G_WE||');';
EXECUTE IMMEDIATE dynSQL ;
Since this statement is part of a Stored Procedure, I wont see the exact error but just get a ORA-06512.
The compiling works fine and I use Oracle 11g.
http://psoug.org/definition/EXECUTE_IMMEDIATE.htmOK I extracted from all of your posts so far that I have to use "bind-variables with :"
From all the other tuorials and forums posts, I assume using the pipe is correct so I added those as well into the script:
set serveroutput on format wraped;
DECLARE
dynSQL VARCHAR2(5000);
P_ENT_E_G_NAME VARCHAR2 (100) :='test1'; P_ENT_E_G_WE VARCHAR2 (100) :='01.02.2012'; P_ENT_B_G_NAME VARCHAR2 (100) :='01.01.2012';
P_ST VARCHAR2 (100) :='32132';
BEGIN
dynSQL:= 'UPDATE CO_STAT2 CO SET CO.'||:P_ENT_B_G_NAME||' = '||:P_ENT_E_G_WE||'
WHERE ST IN (SELECT ST FROM STG_CO_STAT2_TEST CO WHERE
'||:P_ST||' = CO.ST AND
CO.'||:P_ENT_E_G_NAME||' > '||:P_ENT_E_G_WE||' AND
CO.'||:P_ENT_B_G_NAME||'
< '||:P_ENT_E_G_WE||')';
--this is somehow missing after the last < '||:P_ENT_E_G_WE||')';
dbms_output.enable;
dbms_output.put(dynSQL);
--EXECUTE IMMEDIATE dynSQL;
END;Problem:I think I figured it out, the dates that I parse into the query need additional ' -
How can i replace column name using reciever JDBC adapter on runtime.
Hi Experts,
I have a problem with reciever JDBC synario.
Target Oracle table has columns named 2 bytes Japanese character like "日本".
Datatype cannot accept 2bytes character as element name.
So, I would like to how to replace column name on runtime.
Please tell me.
Regards,
Shinya KawaogeHi Shinya Kawagoe,
I understand there is a column with two Japanese characters in target database table. Now you want to UPDATE or INSERT data in that table. You do not want to rename the column name in the database table (if you want to rename column, ask the target database admin ).
As Japanese characters are not allowed in XML Data Type in ESR. You can [Define a SQL_QUERY Statement|http://help.sap.com/saphelp_nwpi711/helpdata/en/44/7b7855fde93673e10000000a114a6b/frameset.htm]. Check the Addres日本s in below code.
<root>
<stmt>
<Customers action="SQL_DML">
<access> UPDATE Customers SET CompanyName=u2019$NAME$u2019, Addresu65E5u672Cs=u2019$ADDRESS$' WHERE CustomerID='$KEYFIELD$u2019
</access>
<key>
<NAME>Firma</NAME>
<ADDRESS>Strasse 3 </ADDRESS>
<KEYFIELD>FI</KEYFIELD>
</key>
</Customers>
</stmt>
</root>
Regards,
Raghu_Vamsee -
How to get the table name and bind columns names in an INSERT statement ?
I have an INSERT statement with input parameters (for example
INSERT INTO my_table VALUES (:a, :a, :a)) and I want to know
without parsing the statement which is the name of table to
insert to and the corresponding columns.
This is needed to generate the SELECT FOR UPDATE statement to
refetch a BLOB before actually writing to it. The code does not
know in advance the schema (generic code).
Thanks in advance,
Joseph CanedoOnce you have prepared your statement, you can execute the
statement with the OCI_DESCRIBE_ONLY mode before binding any
columns. Then you can use OCIParamGet to find out about each
column (column index is 1-based). You should get OCI_NO_DATA or
ORA-24334 if there are no more columns in the statement. Note
that the parameter descriptor from OCIParamGet is
allocated/freed internally by OCI; you do not need to manage it
explicitly. The parameter descriptor is passed to OCIAttrGet in
order to obtain for instance the maximum size of data in the
column OCI_ATTR_DATA_SIZE. You can also get the column name in
this way, although I do not remember the #define off the top of
my head. Getting the table name appears to be much more
difficult; I have never had to do that yet. Good luck. -Ralph -
Is their any limit on the number of column updates in a update statement!
Hello All,
Is their any limit on the number of columns to set in a single update statement.+
am using oracle 11g .
example :-
UPDATE FMLY SET as_comp1 = v_as_comp1 , as_comp2 = v_as_comp2, as_comp3 = v_as_comp3, as_comp4 = v_as_comp4 , as_comp5 = v_as_comp5 , perslt18 = v_perslt18 , persot64 = v_persot64 , fam_size = v_fam_size , numchild = total_children , C_AGE1 = v_c_age1, C_AGE2 = v_c_age2, C_AGE3 = v_c_age3, C_AGE4 = v_c_age4 WHERE FAMID = fmly_famid(i) ;
and also is it good practice to issue single update or multiple updates ?
example for the above update i can have multiple statements like .. does the performance matters if so which is good
UPDATE FMLY SET as_comp1 = v_as_comp1 , as_comp2 = v_as_comp2, as_comp3 = v_as_comp3, as_comp4 = v_as_comp4 , as_comp5 = v_as_comp5
WHERE FAMID = fmly_famid(i) ;
UPDATE FMLY SET perslt18 = v_perslt18 , persot64 = v_persot64 , fam_size = v_fam_size
WHERE FAMID = fmly_famid(i) ;
UPDATE FMLY SET numchild = total_children WHERE FAMID = fmly_famid(i) ;
UPDATE FMLY SET C_AGE1 = v_c_age1, C_AGE2 = v_c_age2, C_AGE3 = v_c_age3, C_AGE4 = v_c_age4 WHERE FAMID = fmly_famid(i) ;
thanks/kumar
Edited by: kumar73 on Sep 25, 2010 8:38 AMIf you can do it in a single SQL statement then you should do that.
Here's a mantra that I found to work out pretty good:
http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:73891904732164
Maybe you are looking for
-
How to install iPhoto after upgrading to yosemite?
how to install iPhoto after upgrading to yosemite?
-
Report format issue in obiee 11g send through Agent
Hi, I have scheduled the agent to send the report to IBM Lotus notes. I need to send the report to users in text format and not an attachement. The report not comming as it is,the column width is getting srinked.I noticed CSS not applying in Lotus no
-
Moving iphoto5 files to new Mac with iPhoto 6
Just bought a new G5 which came with iPhoto 6, had backed up my files from my old G5 which were in iPhoto 5 on an external drive. Having a very hard time getting new mac to load up the photos. I replaced the iPhoto file on the new MAc with the old fi
-
My built in camera is not working and I cannot find out how to fix the problem
I looked throught he manual but could find no trouble shoot help. it was working fine but now I just get a black box if I use video in say skype or if I use photo booth. Both are set with the built in camera as their preference.
-
PSC 1315 - Error message to check print cartridge
I can't get the printer to work. Troubleshooting has identified a bad port as the problem. How do you fix a bad port? What is a bad port? (The PC is a Dell).