Help with dynamic SQL
HelloI have the following function that works well:
FUNCTION to CREATE or REPLACE Get_Partition_Name (sTable VARCHAR2, iImportIndex INTEGER)
RETURN VARCHAR2 IS
cursor c is select A.partition_name from (select table_name, nom_partition,
ExtractValue)
dbms_xmlgen.
() getxmltype
"Select high_value of all_tab_partitions where table_name =" '. "
|| table-name
|| ' ' and table_owner = "'
|| TABLE_OWNER
|| ' ' and nom_partition = "'
|| nom_partition
|| ''''),
import_value of all_tab_partitions) where table_name sTable = and A.import_value = iImportIndex;
sPartitionName varchar (20);
err_num NUMBER;
BEGIN
Open c;
extract the c in sPartitionName;
IF c % ISOPEN THEN
C CLOSE;
END IF;
RETURN sPartitionName;
EXCEPTION
WHILE OTHERS THEN
err_num: = SQLCODE;
-Save the error in the log table
NEWSPAPER. SAVELINE (SQLCODE, SQLERRM);
END Get_Partition_Name;
I am trying to replace the dynamic SQL, something like cursor statement (see below), but it's broken. According to me, Miss me some quotes.
FUNCTION to CREATE or REPLACE 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, nom_partition,
ExtractValue)
dbms_xmlgen.
() getxmltype
'select high_value of all_tab_partitions where table_name ="'
|| table-name
|| ' ' and table_owner = "'
|| TABLE_OWNER
|| ' ' and nom_partition = "'
|| nom_partition
|| ''''''),
text() ") import_value of all_tab_partitions) where table_name =: a and A.import_value =: b';
C OPEN sSql USING sTable, iImportIndex;
extract the c in sPartitionName;
IF c % ISOPEN THEN
C CLOSE;
END IF;
RETURN sPartitionName;
EXCEPTION
WHILE OTHERS THEN
err_num: = SQLCODE;
-Save the error in the log table
NEWSPAPER. SAVELINE (SQLCODE, SQLERRM);
END Get_Partition_Name;
/
Please advise,
Kind regards
M.R.
Assuming that the requirement is to find the partition in the table provided with the provided high value and the problem is that dba/all_tab_partitions.high_value is of type long, an alternative solution in the same sense that you already made is as follows. (I just used a slider instead of a function for the simplicity of the 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 don't know that there are other ways as well. Especially with the XML features, there are normally several ways to skin a cat.
Tags: Database
Similar Questions
-
Tables created in a stored procedure cannot be used with dynamic SQL? The impact?
There is a thread on the forum which explains how to create tables within a stored procedure (How to create a table in a stored procedure , however, it does create a table as such, but not how to use it (insert, select, update, etc.) the table in the stored procedure.) Looking around and in the light of the tests, it seems that you need to use dynamic SQL statements to execute ddl in a stored procedure in Oracle DB. In addition, it also seems that you cannot use dynamic SQL statements for reuse (insert, select, update, etc.) the table that was created in the stored procedure? Is this really the case?
If this is the case, I am afraid that if tables cannot be 'created and used"in a stored procedure using the dynamic SQL, as is the case with most of the servers of DB dynamic SQL is not a part of the implementation plan and, therefore, is quite expensive (slow). This is the case with Oracle, and if yes what is the performance impact? (Apparently, with Informix, yield loss is about 3 - 4 times, MS SQL - 4 - 5 times and so on).
In summary, tables created within a stored procedure cannot be 'used' with dynamic SQL, and if so, what is the impact of performance as such?
Thank you and best regards,
Amedeo.
Published by: AGF on March 17, 2009 10:51AGF says:
Hi, Frank.Thank you for your response. I understand that the dynamic SQL is required in this context.
Unfortunately, I am yet to discover "that seeks to" using temporary tables inside stored procedures. I'm helping a migration from MySQL to Oracle DB, and this was one of the dilemmas encountered. I'll post what is the attempt, when more.
In Oracle, we use [global temporary Tables | http://www.psoug.org/reference/OLD/gtt.html?PHPSESSID=67b3adaeaf970906c5e037b23ed380c2] aka TWG these tables need only be created once everything like a normal table, but they act differently when they are used. The data inserted in TWG will be visible at the session that inserted data, allowing you to use the table for their own temporary needs while not collide with them of all sessions. The data of the TWG will be automatically deleted (if not deleted programmatically) when a) a commit is issued or b) the session ends according to the parameter that is used during the creation of the TWG. There is no real need in Oracle to create tables dynamically in code.
I noticed that many people say that the "Creation of the tables within a stored procedure" is not a good idea, but nobody seems necessarily explain why? Think you could elaborate a little bit? Would be appreciated.
The main reason is that when you come to compile PL/SQL code on the database, all explicit references to tables in the code must correspond to an existing table, otherwise a djab error will occur. This is necessary so that Oracle can validate the columns that are referenced, the data types of those columns etc.. These compilation controls are an important element to ensure that the compiled code is as error free as possible (there is no accounting for the logic of programmers though ;)).
If you start to create tables dynamically in your PL/SQL code, so any time you want to reference this table you must ensure that you write your SQL queries dynamically too. Once you start doing this, then Oracle will not be able to validate your SQL syntax, check the types of data or SQL logic. This makes your code more difficult to write and harder to debug, because inevitably it contains errors. It also means that for example if you want to write a simple query to get that one out in a variable value (which would take a single line of SQL with static tables), you end up writing a dynamic slider all for her. Very heavy and very messy. You also get the situation in which, if you create tables dynamically in the code, you are also likely to drop tables dynamically in code. If it is a fixed table name, then in an environment multi-user, you get in a mess well when different user sessions are trying to determine if the table exists already or is the last one to use so they can drop etc. What headache! If you create tables with table names, then variable Dynamics not only make you a lot end up creating (and falling) of objects on the database, which can cause an overload on the update of the data dictionary, but how can ensure you that you clean the tables, if your code has an exception any. Indeed, you'll find yourself with redundant tables lying around on your database, may contain sensitive data that should be removed.
With the TWG, you have none of these issues.
Also, what is the impact on the performance of the dynamic SQL statements in Oracle? I read some contrasting opinions, some indicating that it is not a lot of difference between static SQL and SQL dynamic in more recent versions of Oracle DB (Re: why dynamic sql is slower than static sql is this true?)
When the query runs on the database, there will be no difference in performance because it is just a request for enforcement in the SQL engine. Performance problems may occur if your dynamic query is not binding variable in the query correctly (because this would cause difficult analysis of the query rather than sweet), and also the extra time, to dynamically write the query running.
Another risk of dynamic query is SQL injection which may result in a security risk on the database.
Good programming will have little need for the tables of dynamically created dynamically or SQL.
-
Hello
I have a data in table (raj_table) with columns (char11) raj_id, raj_number (varchar2 (15)), raj_format (NUMBER), Primary_ID (identity with the values of the primary key column)
Primary_ID raj_id Raj_number Raj_format
1 raj rajvend 1
2 raj rajvend 1
3 raj rajvendor1 2
4 raj rajvendor1 2
5 raj rajvendor1 2
6 raj rajvendor2 3
I used under SQL to get query output as below, but has not achieved the required result:
Select client_id vendor_number, vendor_format, primary_id, row_number() on sl_no (client_id partition, primary_id, vendor_format order of client_id primary_id, vendor_format, vendor_number, vendor_number)
from raj_table by sl_no asc
SL_NO raj_id raj_number raj_format primary_id
1 1 raj rajvendor 1
1 2 raj rajvendor 1
2 3 raj rajvendor1 2
2 4 raj rajvendor1 2
2 5 raj rajvendor1 2
3 6 raj rajvendor2 3
I need help with a SQL query to get the result as above without using the group by clause. I want to bring together the combination of separate line of the three columns (raj_id, raj_number, raj_format) and add a unique serial number for each online game (SL_NO column below). So, above there are 3 unique set of (raj_id, raj_number, raj_format) I can get in a group by clause, but I can not add prmiary_id, SL_NO values if I group by clause. I used the analytical functions like row_number() but no luck. Need solution for this.
with t as)
Select 'raj' raj_id, 'rajvend' raj_number, 1 raj_format, 1 primary_id Union double all the
Select option 2, 'raj', 'rajvend', 1 double Union all
Select 3, 'raj', 'rajvendor1', 2 double Union all
Select 4, 'raj', 'rajvendor1', 2 double Union all
Select 5, 'raj', 'rajvendor1', 2 double Union all
Select 6, 'raj', 'rajvendor2', 3 double
)
Select dense_rank() over (order of raj_id, raj_number, raj_format) sl_no,
t.*
t
order by primary_id
/
PRIMARY_ID RAJ RAJ_NUMBER RAJ_FORMAT SL_NO
---------- ---------- --- ---------- ----------
1 1 raj rajvend 1
1 2 raj rajvend 1
2 3 raj rajvendor1 2
2 4 raj rajvendor1 2
2 5 raj rajvendor1 2
3 6 raj rajvendor2 36 selected lines.
SQL >
SY.
-
String with dynamic SQL in APEX
Hello
I need assistance with dynamic SQL new... sigh...
Could someone post Oracle rules use for the string of quoted text in the dynamic SQL statements?
How to encode the following SQL statement in dynamic SQL?
Select * from emp where State in ('CA', 'HI')
declare
l_sql varchar2 (400)
Start
l_sql: = ' select * from emp where indicate in ("' CA" '...)
end;
Please provide coding rules... Thank you very much
Chris :)Hello
Two single quotes will be replaced by a single quotation mark when used in a string. So:
declare l_sql varchar2(400) begin l_sql := 'select * from emp where state in (''CA'' ..... end;
If you need to close the string to be concatenated to another channel, then you use an other single quotation mark to close the chain and open it again later:
declare l_sql varchar2(400) begin l_sql := 'select * from emp where state in (''' || a_string_variable || ''' ..... end;
Andy
-
Help with making SQL query references to column aliases in the Case statement
I need help with a sql query that I'm trying. I can go about it the wrong way, but I would be grateful if I could get any suggestions on possible solutions. This is my query:
SELECT DISTINCT spriden_pidm, spriden_id id, spriden_last_name | ',' | spriden_first_name name,
CASE
WHEN rcresar_comm_code_01 IN ('268 ', '269', ' 270') THEN rcresar_comm_code_01
WHEN rcresar_comm_code_02 IN ('268 ', '269', ' 270') THEN rcresar_comm_code_02
WHEN rcresar_comm_code_03 IN ('268 ', '269', ' 270') THEN rcresar_comm_code_03
WHEN rcresar_comm_code_04 IN ('268 ', '269', ' 270') THEN rcresar_comm_code_04
WHEN rcresar_comm_code_05 IN ('268 ', '269', ' 270') THEN rcresar_comm_code_05
WHEN rcresar_comm_code_06 IN ('268 ', '269', ' 270') THEN rcresar_comm_code_06
WHEN rcresar_comm_code_07 IN ('268 ', '269', ' 270') THEN rcresar_comm_code_07
WHEN rcresar_comm_code_08 IN ('268 ', '269', ' 270') THEN rcresar_comm_code_08
WHEN rcresar_comm_code_09 IN ('268 ', '269', ' 270') THEN rcresar_comm_code_09
WHEN rcresar_comm_code_10 IN ('268 ', '269', ' 270') THEN rcresar_comm_code_10
END acg_elig_comm_code
CASE
WHEN acg_elig_comm_code = ' 268' THEN 'rigorous HS course. "
WHEN acg_elig_comm_code = '269' THEN ' 2 or several AP or IB"
WHEN acg_elig_comm_code = '270' THEN 'NOC as possible ".
END comm_code_description
OF spriden, rcresar, rcrapp1
WHERE (rcresar_comm_code_01 IN ('268 ', '269', ' 270')
OR rcresar_comm_code_02 ('268 ', '269', ' 270')
OR rcresar_comm_code_03 ('268 ', '269', ' 270')
OR rcresar_comm_code_04 ('268 ', '269', ' 270')
OR rcresar_comm_code_05 ('268 ', '269', ' 270')
OR rcresar_comm_code_06 ('268 ', '269', ' 270')
OR rcresar_comm_code_07 ('268 ', '269', ' 270')
OR rcresar_comm_code_08 ('268 ', '269', ' 270')
OR rcresar_comm_code_09 ('268 ', '269', ' 270')
OR rcresar_comm_code_10 ('268 ', '269', ' 270'))
Rcresar_aidy_code = & aidy_code
AND rcrapp1_aidy_code = rcresar_aidy_code
AND rcrapp1_curr_rec_ind = 'Y '.
AND rcrapp1_seq_no = rcresar_seq_no
AND spriden_pidm = rcresar_pidm
AND rcrapp1_pidm = rcresar_pidm
AND spriden_change_ind IS NULL
ORDER BY name
The second case statement is where I don't know exactly what it takes to get what I want.
Output should be like:
spriden_pidm name ID acg_elig_comm_code comm_code_description
«0000000000', ' 1111111111 ","John Doe","268", «rigorous HS race"»
If I take the second case statement it works great except that I do not have my comm_code description column. My question is how can I use my first statement value box to determine this column? I think that I need a case statement as I have, but I don't know how to reference the value of acg_elig_comm_code. Any help would be greatly appreciated. Thank you.
Published by: blackhole82 on January 20, 2009 09:20Hello
You cannot use the alias column in the query, even where it is set (except in the ORDER BY clause).
You can set the alias in a subquery and then use it in a great query, like this:WITH sub_q AS ( SELECT DISTINCT spriden_pidm,spriden_id id, spriden_last_name||', '||spriden_first_name name, CASE WHEN rcresar_comm_code_01 IN ('268','269','270') THEN rcresar_comm_code_01 WHEN rcresar_comm_code_02 IN ('268','269','270') THEN rcresar_comm_code_02 WHEN rcresar_comm_code_03 IN ('268','269','270') THEN rcresar_comm_code_03 WHEN rcresar_comm_code_04 IN ('268','269','270') THEN rcresar_comm_code_04 WHEN rcresar_comm_code_05 IN ('268','269','270') THEN rcresar_comm_code_05 WHEN rcresar_comm_code_06 IN ('268','269','270') THEN rcresar_comm_code_06 WHEN rcresar_comm_code_07 IN ('268','269','270') THEN rcresar_comm_code_07 WHEN rcresar_comm_code_08 IN ('268','269','270') THEN rcresar_comm_code_08 WHEN rcresar_comm_code_09 IN ('268','269','270') THEN rcresar_comm_code_09 WHEN rcresar_comm_code_10 IN ('268','269','270') THEN rcresar_comm_code_10 END acg_elig_comm_code -- Originally posted with , here (error) FROM spriden, rcresar, rcrapp1 WHERE (rcresar_comm_code_01 IN ('268','269','270') OR rcresar_comm_code_02 IN ('268','269','270') OR rcresar_comm_code_03 IN ('268','269','270') OR rcresar_comm_code_04 IN ('268','269','270') OR rcresar_comm_code_05 IN ('268','269','270') OR rcresar_comm_code_06 IN ('268','269','270') OR rcresar_comm_code_07 IN ('268','269','270') OR rcresar_comm_code_08 IN ('268','269','270') OR rcresar_comm_code_09 IN ('268','269','270') OR rcresar_comm_code_10 IN ('268','269','270')) AND rcresar_aidy_code = &aidy_code AND rcrapp1_aidy_code = rcresar_aidy_code AND rcrapp1_curr_rec_ind = 'Y' AND rcrapp1_seq_no = rcresar_seq_no AND spriden_pidm = rcresar_pidm AND rcrapp1_pidm = rcresar_pidm AND spriden_change_ind IS NULL ) SELECT sub_q.*, CASE WHEN acg_elig_comm_code = '268' THEN 'Rigorous HS course' WHEN acg_elig_comm_code = '269' THEN '2 or more AP or IB' WHEN acg_elig_comm_code = '270' THEN 'ACG possible' END comm_code_description FROM sub_q ORDER BY name
Furthermore, you might think to rearrange your table, so that you do not have 10 columns (rcresar_comm_code_01, rcresar_comm_code_02,...) that essentially do the same thing. The usual way to handle this kind of one-to-many relationship is to have all rcresar_comm_codes in a separate table, one per line, with a pointer to the table where you have them now.
Published by: Frank Kulash, January 20, 2009 11:35
Syntax error has been corrected -
Need help with query SQL Inline views + Group
Hello gurus,
I would really appreciate your time and effort on this application. I have the following data set.
Reference_No---Check_Number---Check_Date---description---Invoice_Number---Invoice_Type---Paid_Amount---Vendor_Number
1234567 11223 - 05/07/2008 -paid for cleaning- 44345563-I-* 20.00 *---19
1234567 11223 - 05/07/2008 - 44345563 -a--10,00---19 ofbad quality adjustment
7654321 11223 - 05/07/2008 - setting the last billing cycle - 23543556 - A - 50.00 - 19
4653456 11223 - 05/07/2008 - paid for cleaning - 35654765 - I - 30, 00-19
Please ignore '-' added for clarity
I'm writing a paid_amount based on Reference_No, Check_Number, Payment_Date, Invoice_Number, aggregate query Invoice_Type, Vendor_Number and display description with Invoice_type 'I' when there are multiple records with the same Reference_No, Check_Number, Payment_Date, Invoice_Type, Invoice_Number, Vendor_Number. When there are no more records I want to display the respective Description.
The query should return the following data set
Reference_No---Check_Number---Check_Date---description---Invoice_Number---Invoice_Type---Paid_Amount---Vendor_Number
1234567 11223 - 05/07/2008 -paid for cleaning- 44345563-I-* 10.00 *---19
7654321 11223 - 05/07/2008 - setting the last billing cycle - 23543556 - A - 50.00 - 19
4653456 11223 - 05/07/2008 - paid for cleaning - 35654765 - I - 30, 00-19
Here's my query. I'm a little lost.
Select b., A.sequence_id, A.check_date, A.check_number, A.invoice_number, A.amount, A.vendor_number
de)
Select sequence_id, check_number, check_date, invoice_number, sum (paid_amount) sum, vendor_number
of the INVOICE
Sequence_id group check_date, check_number, invoice_number, vendor_number
) A, B OF INVOICE
where A.sequence_id = B.sequence_id
Thank you
NickIt seems that this is a duplicate thread - correct me if I am wrong in this case->
Need help with query SQL Inline views + Group
Kind regards.
LOULOU.
-
Need help with dynamic where clause.
Hello world. I'm kind of a novice with PL/SQL, so please be patient with me. I am building a web application using Weblogic Oracle 11 g and Oracle database.
To make a long story short, I need to generate the complex dynamic WHERE clause. I don't know what will be the name of the column or the operator of comparison or the value will be until the moment of execution.
I'm not 100% certain, but I think I need to use dynamic SQL statements. Unless there is a better way to do it.
I'm sure that using dynamic SQL opens me up to SQL injection attacks if I use simple string concatenation. I would like to use bind variable if possible.
In any case, it seems like trying to build a dynamic where clause does not seem to work as I want it would be...
bv1 := 'colA = 5 and colB >= 9'; query_str := 'SELECT * FROM view WHERE :bv1'; OPEN CUR FOR query_str USING bv1;
The code above pours out when I try to run it.
Is there a way to build dynamic where the provisions without the use of concatenation of simple string that leaves me open to attacks by SQL injection?
Thank you
Hello. I have read briefly upward on things, you suggested, but it seems a bit abstract for me since I was a novice.
Can you give us an explanation or an example of how to use it to accomplish what I need to do?
Do ypu really plan create a query with a WHERE clause that contains a predicate for all possible columns?
Variable bind offer performance when the same query is executed several times with different values for bind variables.
Select * from emp where empno =: v_empno
After the first run Oracle will always be this query in the library cache. The next running can use the version of the cache even if the bind value is different.
Select * from emp where empno =: v_empno;
Select * from emp where ename =: v_ename;
Select * from emp where sal =: v_sal;
Each one is a DIFFERENT query. Yes - each of them uses a variable binding, but queries are different.
So, if your username select EMPNO, an '=', and a value from the first query can be executed. But the next time that the user can select the ENAME column so that 'stored' first request may not be used given that the query does not match.
The third time your user selects SAL so none of the first two queries can be used in the library cache. The use of bind variables gives performance during the SAME QUERY is used multiple times with DIFFERENT values for the variable binding. Oracle is not to analyze the hard query everything simply because the VALUE is different.
So bind variables do not help you if most of the queries were completely DIFFERENT sets of predicates. And SYS_CONTEXT will not help either since that simply provides a way to define binds the values of the variables.
Just for the simple example above, there are at least SIX possible combinations of columns that could choose your user name: empno, ename, sal, empno ename, empno & sal, ename & sal
-
Works with dynamic sql and list of numbers as return value
Hello.
Problems:
1. How can I insert the USERNAME variable in the string so it will be replaced over time.
2. I intend to return a list of IDS as 1,4,6,7,2 I want to use later in an IN clause.
How to complete the return function with the dynamic sql output variable?
I have no preference to dynamic sql but it was just something that came into my mind
When I thought that the implementation of the obligation to choose a list of offices for specific user groups.
(select statements from the sample are cut short, they're actually really big and I want to reuse this function in my)
BI Publisher data model for multiple modells).
CREATE or REPLACE FUNCTION F_OFFICES (-input parameters)
USERNAME IN VARCHAR2
USERGROUP IN VARCHAR2,
)
-Output parameter
RETURN VARCHAR2 AS
dynSQL VARCHAR2 (1000);
BEGIN
IF USERGROUP = "local" THEN
dynSQL: = 'xxx SELECT FROM CO_B WHERE Userid = username';
ELSIF USERGROUP = "regional" THEN
dynSQL: = "SELECT...". » ;
ELSIF USERGROUP 'federal' = THEN
dynSQL: = "SELECT...". » ;
END IF;
EXECUTE IMMEDIATE dynSQL;
-RETURN?;
END F_OFFICES;
Thanks for any help.As you have presented essentially pseudo-code we can only give you a Pseudo-solution :)
But the principle is:
... --Output parameter RETURN VARCHAR2 AS dynSQL VARCHAR2(1000); return_value varchar2(30): BEGIN IF USERGROUP = 'local' THEN dynSQL:= 'SELECT xxx FROM CO_B WHERE userid = :1'; -- placeholder for parameter ... END IF; EXECUTE IMMEDIATE dynSQL using USERNAME -- pass parameters in placeholder order into return_value; -- obviously this must match the projection of the dynamic query RETURN return_value; END F_OFFICES ;
This approach is not good if you want to vary the dynamic query projection. In this case, you can use a REF CURSOR or maybe DBMS_SQL.
Cheers, APC
-
Need help with dynamic Action through 4 items
Hello everyone.
I'm having some trouble trying to comp with dynamic action that will turn on or display a select list item when a value is set for the four elements of the Radio button group.
P1_SELCT_LIST
P1_RADIO_GROUP_1
P1_RADIO_GROUP_2
P1_RADIO_GROUP_3
P1_RADIO_GROUP_4
So once all four Radio groups are not null, I want the select View list item.
Any help with this would be great.
I'm on Apex 4.2.0.00.27
Hello
You can create the following action:
Event: click on
Selection type: jQuery selector
jQuery selector: radio
condition:
$v ('P1_RADIO_GROUP_1')! == ''
&&
$v ('P1_RADIO_GROUP_2')! == ''
&&
$v ('P1_RADIO_GROUP_3')! == ''
&&
$v ('P1_RADIO_GROUP_4')! == ''
Then add a real Action as follows:
ACtion: show
Fires when the result of the event is: true
Fire on the page loading: No. (uncheck)
Assigned to elements, selection type: product (s)
Product (s): P1_SELECT
Also add an Action to false as follows:
ACtion: hide
Fires when the result of the event is: false
Fire on the page loading: YES (check)
Assigned to elements, selection type: product (s)
Product (s): P1_SELECT
Kind regards
Vincent
-
I would like to create a ViewObject based on a PIVOT query. The question I have is that the PIVOT columns are based on a subquery. It seems that it is not possible with regular SQL:
Select *.
from TABLE1 as T
Pivot
(
Max (T.value)
for T.POINTNAME in (SELECT pointname from point)
) as P
I tried the query in SQL Developer.The solution is to use a dynamic query, so I was wondering if VO supports this type of query
Hello
What about using a normal view object and then use a PivotTable for the user to perform its analysis. If not, what happened to create a database view or start a display on a stored procedure object? So there seems to be 3 possibilities, where I think that the first (using the PivotTable)
Frank
-
Need help with PL/SQL so and then select
Hello guys, I am new to the PL/SQl programming (only Java experience) and I'm pretty stuck to my task. It would be great if you could help me. I am in programming with Oracle SQL * Plus Version 10.2.0.3.0
Whenever a user logs on to the server a database entry is created with information about the logged-on user. I need to create a PL/SQL command that selects all the information from last month. Unfortunately, the date_stamp column has a certain weird format: 1131210 for December 10, 2013
My idea so far:
DECLARE
v_today NUMBER;
BEGIN
v_today: = TO_NUMBER (TO_CHAR (SYSDATE, 'MM')); -Save the number of the month (e.g.12) in v_today
IF v_today = 01 THEN
SELECT * from audittrl
WHERE the date_stamp between 1131201 AND the 1131231;
ELSIF v_today = 02 THEN
SELECT * from audittrl
WHERE the date_stamp between the 1130131 AND 1130101;
.......
END IF;
END;
/
Error code: "an INTO clause in this SELECT statement.
I do not want to save the result to select a variable, hope you can help me. Thanks in advance.
Hello
6a4d1bcd-c00e-4dac-AB64-9b6bdb1652d1 wrote:
Thanks, I'll try that, if still get caught once, I'll be back. Anway I'm not sure of the solution of Chris227, because I can't test it right now. From my point of view it gives you information the current month (e.g., December) and not the month previous (-online November), or have I missed something. ?
You are right. In addition, it does not for a given year. If you have data from several years in the table, it will select lines for the month of December 2012, 2011, 2010,... but also of 2013.
Here's a way to get around that:
DECLARE
prev_month_start PLS_INTEGER: = TO_NUMBER (TO_CHAR (ADD_MONTHS (SYSDATE-1)
, "YYMM"1' "01"
)
);
this_month_start PLS_INTEGER: = TO_NUMBER (TO_CHAR (SYSDATE
, "YYMM"1' "01"
)
);
BEGIN
FOR (IN) rec
SELECT *.
Of audittrl
WHERE the date_stamp > = prev_month_start
AND date_stamp< > >
ORDER BY user_id, date_stamp - or other)
LOOP
dbms_output.put_line (rec.date_stamp);
dbms_output.put_line (rec.event);
dbms_output.put_line (rec.user_id)
dbms_output.put_line (rec.host_name);
END LOOP;
END;This should also be more effective, because it will allow the optimizer to use an index on date_stamp. Even if there is no index, it will be more effective because it avoids calling any function (for example, SUBSTR) on each line of the table.
You needn't PL/SQL to get these results. Just use SQL, you might say:
SELECT event, host_name, user_id and date_stamp
Of audittrl
WHERE the date_stamp > = TO_NUMBER (TO_CHAR (ADD_MONTHS (SYSDATE-1)
, "YYMM"1' "01"
)
)
AND date_stamp< to_number="" (="" to_char="" (="" sysdate="" to_number="" (="" to_char="" (=""> >
, "YYMM"1' "01"
)
)ORDER BY user_id, date_stamp - or other
;
Your front end will provide column headers and touch the data so that the columns line up. It can also set the output to a file. (For example, if your front-end is SQL * Plus, you can use the command of the COIL.)
I guess date_stamp is a NUMBER. If it is a string, the solutions above can be simplified a bit.
This problem (and many other problems) would be so much simpler if date_stamp was a DATE column. Using numbers or strings to store the date information is simply asking for trouble.
-
Help with dynamic action and the selection list item
G ' Day Apex gurus.
I have problems trying to achieve to trigger the Help window from an element automatically select. A Help window is triggered when it is clicked on the label of an item, but my customer wants to be triguered automatically as soon as the user clicks to view the options in the select list.
I think I should be able to do with dynamic actions but I can't function.
I know when someone clicks on the label of the item selection list trigger this JavaScript
JavaScript:popupFieldHelp('277938589795252851','1545903379570909')
So I want to trigger the javascript also when the user click on the item selection list and pull down the options and for that I think that the dynamic action is the way to go, but I can't do things.
That's what I have to do:
I created a dynamic option as follows:
Name: test
Sequence: 30
Even: click
Selection type: product (s)
Article (s): P1_RATING <-a selection list item
Condtion: - no requirement.
Real Actions
Sequence: 10
Action: Run the JavaScript Code
Fires when the result of the event is: true
Fire on loading the page: checked
Code: javascript:popupFieldHelp('277938589795252851','1545903379570909')
Thank you anyone who can tell me what I'm doing wrong here or bring a solution to my problem to trigger the Help window from an element automatically select.
Kind regards
CarlosHi Carlos,
I've set up a test case of exactly in the same way and it worked fine for me. I've created a page element called P1_DA_DEMO and added some values of the static selection list, then added a help text. I used the settings are lower, I suggest you try again, but also make sure that you have no other Javascript errors on the page. Use a tool like firebug to check.
Name: Action Dynamics demo
Sequence: 10
Even: click
Selection type: product (s)
Product (s): P1_DA_DEMO<- a="" selection="" list="">->
Condtion: - no requirement.Real Actions
Sequence: 10
Action: Run the JavaScript Code
Fires when the result of the event is: true
Fire on loading the page: unchecked
Code: javascript:popupFieldHelp('277938589795252851','1545903379570909')Scope of the event set a Bind s.
Thank you
Paul
-
Hello people,
I'm just wondering that when you want to handle the large amount of lines we use FORALL to reduce the change of context. So, what happens if when we use dynamic sql instead of normal SQL FORALL. I mean using the dynamic SQL inside FORALL increase performance?
Because I know that when we use the variable binding in sql statements or questions, then it will scan only just 1 hour instead of every time. Therefore, other SQL statements don't need to analyze which does not have a performance gain?
FORALL reduced context switching AND SQL dynamic with bind variable prevent unnecessarily analysis, so wheren here are using hear, she will be better performance isn't? Please correct me if I'm wrong.
For example;
Thank you very much.FORALL i IN l_in_tab.first .. l_in_tab.last EXECUTE IMMEDIATE 'DELETE FROM bulk_collect_test WHERE object_id = :1' USING l_in_tab(i);
>
Dynamic SQL with variable bind unnecessarily prevent analysis
>
Yes - compared to dynamic SQL that does not bind variable.Just use
DELETE FROM bulk_collect_test WHERE object_id = l_in_tab(i);
FORALL essentially uses a form of BONDING in BULK already
See reduction in overhead costs of loop for DML statements and queries with SQL in bulk in Chapter 12 Applications of PL/SQL Tuning of Performance in the PL/SQL doc
http://docs.Oracle.com/CD/B28359_01/AppDev.111/b28370/tuning.htm#sthref1455>
Bulk SQL uses PL/SQL collections to pass back and forth large quantities of data in simple operations. This process is called binding of bulk. If the collection has n elements, bulk binding uses a single operation to perform the equivalent of n SELECT INTO, INSERT, UPDATE, or DELETE statements -
Need help with PL/SQL query complex
I need help with a query that need access to data from 3 tables. That's what I did
I created 3 tables
CREATE TABLE post_table
(
post_id varchar (20),
datepost DATE,
KEY (post_id) elementary SCHOOL
) ;
CREATE TABLE topic
(
TOPIC_ID varchar (20),
name varchar (20),
PRIMARY KEY (topic_id)
);
CREATE TABLE blogpost_table
(
TOPIC_ID varchar (20),
post_id varchar (20),
PRIMARY KEY (topic_id, post_id);
FOREIGN KEY (topic_id) REFERENCES topic (topic_id) ON DELETE CASCADE,
FOREIGN KEY (post_id) REFERENCES post_table (post_id) ON DELETE CASCADE
);
Now, I inserted a few values in these tables as
INSERT INTO post_table VALUES ('p1', to_date ('2009-09-14 18:00 "," MM/DD/YYYY mi:ss'));))
INSERT INTO post_table VALUES ('p2', to_date ('2009-07-18 18:00 "," MM/DD/YYYY mi:ss'));))
INSERT INTO post_table VALUES ('p3', to_date ('2009-07-11 18:00 "," MM/DD/YYYY mi:ss'));))
INSERT INTO post_table VALUES ('p4', to_date ('2009-03-11 18:00 "," MM/DD/YYYY mi:ss'));))
INSERT INTO post_table VALUES ('p5', to_date ('2009-07-13 18:00 "," MM/DD/YYYY mi:ss'));))
INSERT INTO post_table VALUES ('p6', to_date ('2009-06-12 18:00 "," MM/DD/YYYY mi:ss'));))
INSERT INTO post_table VALUES ('p7', to_date ('2009-07-11 18:00 "," MM/DD/YYYY mi:ss'));))
INSERT INTO VALUES subject ("t1", "baseball");
INSERT INTO category VALUES ('t2', 'football');
INSERT INTO blogpost_table VALUES ("t1", "p1");
INSERT INTO blogpost_table VALUES ('t1', 'p3');
INSERT INTO blogpost_table VALUES ("t1", "p4");
INSERT INTO blogpost_table VALUES ('t1', 'p5');
INSERT INTO blogpost_table VALUES ('t2', 'p2');
INSERT INTO blogpost_table VALUES ('t2', 'p6');
INSERT INTO blogpost_table VALUES ("t2", "p7");
I'm launching SQL queries on the table in this topic.
I want to write a SQL query that returns me the name of a topic (s) and the number of blog_post (s) associated with the topic in descending order of the number of blog posts created in July.
Can someone please help me to write this query?
Thank you
Published by: user11994430 on October 9, 2009 07:24Thanks for the test of the configuration!
SQL>SELECT t.NAME, COUNT(*) 2 FROM topic t, blogpost_table b, post_table p 3 WHERE b.topic_id = t.topic_id 4 AND p.post_id = b.post_id 5 AND p.datepost >= DATE '2009-07-01' 6 AND p.datepost < DATE '2009-08-01' 7 GROUP BY t.NAME 8 ORDER BY COUNT(*) desc; NAME COUNT(*) -------------------- ---------- baseball 2 soccer 2
HTH, Urs
-
Help with oracle sql to get all possible combinations in a table.
Hello guys I have a small predicatement which has me a little confused. I have a table similar to the following. (It is a sample of my real of the table. I use this to explain the original table containing sensitive data).
CREATE TABLE TEST01( TUID VARCHAR2(50), FUND VARCHAR2(50), ORG VARCHAR2(50));
Insert into TEST01 (TUID,FUND,ORG) values ('9102416AB','1XXXXX','6XXXXX'); Insert into TEST01 (TUID,FUND,ORG) values ('9102416CC','100000','67130'); Insert into TEST01 (TUID,FUND,ORG) values ('955542224','1500XX','67150'); Insert into TEST01 (TUID,FUND,ORG) values ('915522211','1000XX','67XXX'); Insert into TEST01 (TUID,FUND,ORG) values ('566653456','xxxxxx','xxxxx');
The 'X' is wildcard character elements * (I inherit it and I can not change the table format) * I would like to make a query as follows"TUID" "FUND" "ORG" "9102416AB" "1XXXXX" "6XXXXX" "9102416CC" "100000" "67130" "955542224" "1500XX" "67150" "915522211" "1000XX" "67XXX" "566653456" "xxxxxx" "xxxxx"
However I like to do is to retrieve all the records that have have these segments in them including ' xselect tuid from test01 where fund= '100000' and org= '67130'
in other words the output expected here would be
I started to write a massive sql statement that would have the 12 as the instruction inside, because I must compare the org and finance every possible way."TUID" "FUND" "ORG" "9102416AB" "1XXXXX" "6XXXXX" "9102416CC" "100000" "67130" "915522211" "1000XX" "67XXX" "566653456" "xxxxxx" "xxxxx"
This is where im headed. but im wondering if there is a better way.
can someone give me a hand to come with this sql statement...select * from test02 where fund = '100000' and org = '67130' or fund like '1%' and org like '6%' or fund like '1%' and org like '67%' or fund like '1%' and org like '671%' or fund like '1%' and org like '6713%' or fund like '1%' and org like '67130' or fund like '10%' and org like '6%'...etc /*seems like there should be a better way..*/
mlov83 wrote:
If I run the presentselect tuid,fund, org from test01 where '100000' like translate(fund, 'xX','%%') and '67130' like translate(org, 'xX','%%');
That's what I
"TUID" "FUND" "ORG" "9102416AB" "1XXXXX" "6XXXXX" "9102416CC" "100000" "67130" "915522211" "1000XX" "67XXX" "566653456" "xxxxxx" "xxxxx" "9148859fff" "1XXXXXX" "X6XXX"
the last item should be excluded. The second digit in "org" is a "7".
Fund is bad, too. Looking for 6 characters ("100000"), but the funds on this line is 7 characters ("1XXXXXX").
and it's always get picked up.
That's why you should use the Joker _ instead of %
select tuid, fund, org from test01 where '100000' like translate (fund, 'xX', '__') and '67130' like translate (org, 'xX', '__') ;
It is difficult to see, but in two calls to TRANSLATE, the 3rd argument is a string 2 ' _.
Maybe you are looking for
-
Re: Satellite L750-1LU - what is the standby time battery 'common '.
Greetings. I'm Rom of the Greece...I am a new owner of Toshiba (a few days ago) and my question is the BATTERY LIFE.I have a Sattelite L750-1LU and I wonna know what is the 'common' stand-by time for this laptop battery... When I bought the laptop (w
-
Cannot repair Windows 7 on the Satellite Pro C650 18U
Since getting my new laptop Toshiba in October, I had endless problems. It's going to be big, but I guess that relevant to the cause of the problem. My first problem with him has come to uninstall McAfee. I was able to do a full restore (it was new s
-
Satego X 200 - 20o: is it possible to update the graphics card
Hello Is it possible to upgrade the Satego X 200 - 20o with a better graphics personnel card or is it possibe to install a second graphics card for SLI Mode...? Is it also possible to install the PhysX card in this notebook...? Question: Ist of is it
-
Hello HP tech, need help. I just bought a HP 15-g005AX and I installed Windows 8 pro 64 bit OS, however, I can't install the driver on my laptop wireless. I have to install all the drivers first? Thank you.
-
T410s - no sound if not unplug the headphones
On my Thinkpad T410s, I can hear the sound with headphones, but when I unplug the headphones no sound. I turn the volume knob, without result. Can you please help? Thank you