Help with like in sql
Hi all,
I am having an issue with like statement with full text search
My data : BEAN PEELER
SQL STATEMENT: Select * from table where col1 like '%[^a-z]peeler[^a-z]%'
doesn't give all the results which has peeler in it (for example the above example)
instead if i use this statement
Select * from table where col1 like '%peeler%' it returns all the rows.
But, i need to check the exact word search and not subset of it.
My problem is how is my query able to detect few rows which has peeler in it but not all? please help
so did you try this?
declare @tab table(
val varchar(50));
insert into @tab values
('BEAN PEELER'),
('PEELERRRRR'),
('SOMPEERLER');
Select * from @tab where val like 'peeler' or VAL like '% Peeler %' or val like '% Peeler'
Satheesh
My Blog |
How to ask questions in technical forum
Similar Messages
-
Help with anonymus pl/sql layout using javascript
Hi people.
i want to display some records on a region (using apex 4.2) , this anonymous pl/sql script below shows 3 records from database, but the layout only shows me the first record with it's data, the others 2 records, only show me labels.
i have verified this same query creating a report and it shows the 3 records correctly.
i guess i am doing something wrong with this javascript routine or i am surely missing something,
in this link you can see the layout i am getting. (http://sdrv.ms/Xrv0J8).
the other little help i need is to display in one row for each record. actually i am getting one row for each label and one row for each data record. i have read and found is something about /div, but i don't no how to change it to get desired results, any suggestion is welcome.
thanks in advance for any help.
i am completely new in apex and java script, but i have several years experience in pl/sql.
The Script :
Begin
Declare
Cursor Deliv Is
Select item,
To_char (Delivery, 'month dd, yyyy hh24:mi:ss') Delivery,
Current_date
From pending_items;
Begin
For A In Deliv Loop
Begin
Sys.Htp.P ('<script type="text/javascript">');
Sys.Htp.P ('function cdtd() {');
Sys.Htp.P (' var xmas = new Date("' || a.delivery || '")');
Sys.Htp.P (' var now = new Date();');
Sys.Htp.P (' var timeDiff = xmas.getTime() - now.getTime();');
Sys.Htp.P (' if (timeDiff <= 0) {');
Sys.Htp.P (' clearTimeout(timer);');
-- Sys.Htp.P (' document.write("Some Text Here!");');
Sys.Htp.P (' // Run any code needed for countdown completion here');
Sys.Htp.P (' }');
Sys.Htp.P (' var seconds = Math.floor(timeDiff / 1000);');
Sys.Htp.P (' var minutes = Math.floor(seconds / 60);');
Sys.Htp.P (' var hours = Math.floor(minutes / 60);');
Sys.Htp.P (' var days = Math.floor(hours / 24);');
Sys.Htp.P (' hours %= 24;');
Sys.Htp.P (' minutes %= 60;');
Sys.Htp.P (' seconds %= 60;');
Sys.Htp.P (' document.getElementById("daysBox").innerHTML = days;');
Sys.Htp.P (' document.getElementById("hoursBox").innerHTML = hours;');
Sys.Htp.P (' document.getElementById("minsBox").innerHTML = minutes;');
Sys.Htp.P (' document.getElementById("secsBox").innerHTML = seconds;');
Sys.Htp.P (' var timer = setTimeout("cdtd()",1000);');
Sys.Htp.P ('}');
Sys.Htp.P ('</script>');
Sys.Htp.P ('Days ');
Sys.Htp.P ('<div id="daysBox"></div>');
Sys.Htp.P ('Hours');
Sys.Htp.P ('<div id="hoursBox"></div>');
Sys.Htp.P ('Minutes');
Sys.Htp.P ('<div id="minsBox"></div>');
Sys.Htp.P ('Seconds');
Sys.Htp.P ('<div id="secsBox"></div>');
Sys.Htp.P ('<script type="text/javascript">');
Sys.Htp.P ('cdtd();</script>');
End;
End Loop;
End;
End;Let's focus on your delivery dates and javascript for now.
Why you would put your javascript in htp.p calls in a plsql region is quite beyond me. When you edit the page there is a javascript region where you can put global variables and functions, an excellent spot for this then, and a lot more maintainable than this.
Now it's also obvious that your query on pending items will return more than one record. So, using a report would serve you well in this case. However, using code like this:
document.getElementById("daysBox").innerHTML = days;
document.getElementById("hoursBox").innerHTML = hours;
document.getElementById("minsBox").innerHTML = minutes;
document.getElementById("secsBox").innerHTML = seconds;will not serve you. getElementById is meant to return one element uniquely identified by an ID. If you have a report with multiple rows, and elements on each row with the same ID, you are doing something wrong. You would need the delivery date per row, and I guess that you put out your code with htp.p because you do not know how to deal with that and passing it in to the javascript procedure.
But wouldn't it be more oppurtune for you to simply create a report with a source sql where you calculate each part of the date, and then refresh this region with a certain interval. If you'd refresh every 5 minutes, wouldn't that be more than fast enough to keep track of things? Don't forget, refreshing a region will execute the sql again.
It's not that you can't accomplish a multirecord report with a countdown per row, but are you comfortable enough with javascript and jquery to code and maintain that versus leveraging plsql and dynamic actions (there is even a dynamic action timer plugin provided by oracle)? -
Please help with workflow inspired SQL
Hi everyone, I need some help with a piece of sql I need to create. It will be used in a workflow scenario and is therefore a bit hairy and has some limitations. So here goes..
I have 2 current tables that will be used in this query. The first is a table used as a supervisor cross reference, and the second will be used for signing authority, or approval authorization. In short...the first table will give you the supervisor for the particular employee or employee in the where clause. This tells us who to route to. The second table has the operators authority level. As an example.... 1, 2, 3, or 4. A 1 could signify that this supervisor can approve for up to $5,000, and a 4 could signify that this person can approve up to $250,000. thats the basic idea.
So what I need to do in ONE statement is get the requestor's supervisor, and then check his/hers authority level for level 1, 2, 3 or 4. The authority level needed will be passed into the query, so I will have that as well as the requestor. And here is the hard part...... If no rows are returned (the supervisor does not have authority to approve) I need the query to apply the same logic to the next supervisor. In other words, the supervisor's supervisor. Every requestor will have a supervisor. Every supervisor will also have a supervisor....so it goes until we get to the CEO. So the query needs to keep going until it finds a row matching the signing authority.
So the limitations are......this needs to happen in one SQL query, and this query can only return ONE field!
Here are some creates and inserts to give you something to work with. Been suffering with this one for a few days so your help is GREATLY appreciated.
Supervisor cross reference table
CREATE TABLE PS_ROLEXLATOPR (ROLEUSER VARCHAR2(30) DEFAULT ' ' NOT
NULL,
DESCR VARCHAR2(30) DEFAULT ' ' NOT NULL,
OPRID VARCHAR2(30) DEFAULT ' ' NOT NULL,
EMAILID VARCHAR2(70) DEFAULT ' ' NOT NULL,
FORMID VARCHAR2(70) DEFAULT ' ' NOT NULL,
WORKLIST_USER_SW VARCHAR2(1) DEFAULT 'Y' NOT NULL,
EMAIL_USER_SW VARCHAR2(1) DEFAULT 'Y' NOT NULL,
FORMS_USER_SW VARCHAR2(1) DEFAULT 'Y' NOT NULL,
EMPLID VARCHAR2(11) DEFAULT ' ' NOT NULL,
ROLEUSER_ALT VARCHAR2(30) DEFAULT ' ' NOT NULL,
ROLEUSER_SUPR VARCHAR2(30) DEFAULT ' ' NOT NULL,
EFFDT_FROM DATE,
EFFDT_TO DATE) TABLESPACE PTTBL STORAGE (INITIAL 40000 NEXT 100000
MAXEXTENTS UNLIMITED PCTINCREASE 0) PCTFREE 10 PCTUSED 80
INSERT INTO PS_ROLEXLATOPR
DESCR,
OPRID ,
EMAILID ,
FORMID ,
WORKLIST_USER_SW ,
EMAIL_USER_SW ,
FORMS_USER_SW ,
EMPLID ,
ROLEUSER_ALT ,
ROLEUSER_SUPR ,
EFFDT_FROM
VALUES
DESCR,
'ABC123',
'XYZ123',
Signing Authority table..
CREATE TABLE PS_ZZ_WF_AUTHORITY (OPRID VARCHAR2(30) NOT NULL,
EMPLID VARCHAR2(11) NOT NULL,
EMAILID VARCHAR2(70) NOT NULL,
ZZ_SIGN_AUTHORITY VARCHAR2(1) NOT NULL) TABLESPACE APLARGE STORAGE
(INITIAL 40000 NEXT 100000 MAXEXTENTS UNLIMITED PCTINCREASE 0)
PCTFREE 10 PCTUSED 80
insert into PS_ZZ_WF_AUTHORITY
OPRID,
EMPLID,
EMAILID,
ZZ_SIGN_AUTHORITY
Values
'XYZ123',
'Any_Email',
'1'
)Hi,
Welcome to the forum!
Thanks for posting the CREATE TABLE and INSERT statements; that's very helpful!
Whenever you have a question, also post the results you want to get from the sample data your posted.
Always say what version of Oracle you're suing.
In the sample data you posted, I only see one row in each table. Does that really give a good picture of the problem? If the problem involves going up the chain of command 1, 2, 3 or more levels, then shouldn't you have a chain of at least 3 people to show the problem and test the results?
I think what you need is CONNECT BY Query , which works on a table with a parent-child relationship. Given a parent, you can find that ow's children, the children's children, their children, and so on, however many generations there are.
I don't think I can demonstrate this with your sample data, so I'll use the scott.emp table, whcih you should be able to query.
The emp table contains a hierarcy of employees, including this data:
NAME EMPNO MGR SAL JOB
KING 7839 5000 PRESIDENT
JONES 7566 7839 2975 MANAGER
SCOTT 7788 7566 3000 ANALYST
ADAMS 7876 7788 1100 CLERK
FORD 7902 7566 3000 ANALYST
SMITH 7369 7902 800 CLERK
BLAKE 7698 7839 2850 MANAGER
ALLEN 7499 7698 1600 SALESMAN
WARD 7521 7698 1250 SALESMAN
MARTIN 7654 7698 1250 SALESMAN
TURNER 7844 7698 1500 SALESMAN
JAMES 7900 7698 950 CLERK
CLARK 7782 7839 2450 MANAGER
MILLER 7934 7782 1300 CLERKThis show, among other things, that the employee with ename='KING' (empno=7839) has no boss.
JONES (empno=7566) does have a boss (mgr=7839), namely KING.
SCOTT (empno=7788) has a bos (mgr=7566), who is JONES.
I got the results above using this CONNECT BY query:
SELECT LPAD ( ' '
, 3 * (LEVEL - 1)
) || ename AS name
, empno
, mgr
, sal
, job
FROM scott.emp
START WITH mgr IS NULL
CONNECT BY mgr = PRIOR empno
;This is an example of a Top-Down Query , where we start with a parent, then find its children, grandchildren, and so on.
In your probelm, you want to do a Bottom-Up Query ; given a child, you want to see if its parent has a certain level of authority. If not, you need to look at that parent's parent, and keep going until to either reach someone with the right qualifications, or you reach the end of the chain of command.
That's similar to this problem: given a set of employees in scott.emp (say, everyone with job='CLERK') we want to find their closest ancestor who has a sal of 3000 or more. Look at the data above: you can see that SMITH is a CLERK, and SMITH'S boss, FORD, has sal=3000, so we want a row of output that shows SMITH and FORD.
For a different example, looks at MILLER. MILLER's boss, CLARK, only has sal=2450, so we need to look at CLARK's boss, KING.
One way to do that in a CONNECT BY query is:
SELECT CONNECT_BY_ROOT ename AS subordinate
, ename
, LEVEL - 1 AS steps_apart
FROM scott.emp
WHERE CONNECT_BY_ISLEAF = 1
START WITH job = 'CLERK'
CONNECT BY empno = PRIOR mgr
AND PRIOR sal < 3000
;Output:
SUBORDINAT ENAME STEPS_APART
SMITH FORD 1
ADAMS SCOTT 1
JAMES KING 2
MILLER KING 2You should be all set to write the query now.
Just kidding. I'll bet there's a lot of stuff in this message that's new to you. It's all documented in the SQL Language manual:
http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/index.htm
If you'd like help, post your version, a more complete set of sample data, and the results you want from that data.
Explain, with specific examples, how you get the results you posted from the data you posted.
Do as much of the query as you can, and post your code. -
Help with some PL/SQL Triggers
hello there, I'm totally new using PL/SQL so I need your help with two triggers.
For instance
1. Compare two dates, and verify that there are different, you must send a message Error
2. When I insert a new record, a trigger must obtain data from other tables and add it (on a new record)
Maybe not the answers, maybe the way to go!
Thks!Hi,
Welcome to the forum
1. Compare two dates, and verify that there are different, you must send a message Errorwhy trigger ?
Trigger is Only for when DML Performed :)
try 1st one in procedure..
create or replace procedure testing(p_date in date)
is
v_date date;
begin
select to_date(hiredate,'mm-dd-rr') into v_date
from emp
where to_date(hiredate,'mm-dd-rr')=to_date(p_date,'mm-dd-rr');
dbms_output.put_line(v_date);
exception
when others then
dbms_output.put_line('No Data Found');
end;
2. When I insert a new record, a trigger must obtain data from other tables and add it (on a new record)i didn't understand can you please explain me in detail ?
Thanks
Venkadesh -
Help with Like Prepared statement
Hi,
Below is a part of the code in my test application which I am using for searching the phone book.
I want to do a pattern search with like, but for some reason, my code is not fetching me the results.
It just gives Zero results.
But if i use "=" it works fine.
I have highlighted the important part
Can you please guide me to correct this code ?
public class DBprgm {
ResultSet result;
public ResultSet getSearch(String a) {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:odbc:source", "sa" , "");
Statement st = con.createStatement();
PreparedStatement ps = con.prepareStatement("select from friends where fname like ? ");*
*String x = "%"+a+"%";*
*ps.setString(1, x);*
result = ps.executeQuery();
catch (SQLException s){
s.printStackTrace();
catch (ClassNotFoundException c){
c.printStackTrace();
return result;
}Your code leaks Connections! You create a Connection and never close it, that's a pretty bad idea.
What database are you using? From a quick glance the code seems correct (apart from the problem I mentioned above, of course).
Edit: also, I see that you're using the JDBC-ODBC bridge. That JDBC driver has only very limited functionality and also has a few tiny bugs. Generally I'd strongly suggest that you avoid it and use your databases native JDBC drivers instead. Maybe that's also the problem here, but I can't say for sure. -
Help with creating a sql file that will capture any database table changes.
We are in the process of creating DROP/Create tables, and using exp/imp data into the tables (the data is in flat files).
Our client is bit curious to work with. They do the alterations to their database (change the layout, change the datatype, drops tables) without our knowing. This has created a hell lot of issues with us.
Is there a way that we can create a sql script which can capture any table changes on the database, so that when the client trys to execute imp batch file, the sql file should first check to see if any changes are made. If made, then it should stop execution and give an error message.
Any help/suggestions would be highly appreciable.
Thanks,Just to clarify...
1. DDL commands are like CREATE, DROP, ALTER. (These are different than DML commands - INSERT, UPDATE, DELETE).
2. The DDL trigger is created at the database level, not on each table. You only need one DDL trigger.
3. You can choose the DDL commands for which you want the trigger to fire (probably, you'll want CREATE, DROP, ALTER, at a minimum).
4. The DDL trigger only fires when one of these DDL commands is run.
Whether you have 50 tables or 50,000 tables is not significant to performance in this context.
What's signficant is how often you'll be executing the DDL commands on which the trigger is set to fire and whether the DDL commands execute in acceptable time with the trigger in place. -
Need Help with Creating the SQl query
Hi,
SQL query gurus...
INFORMATION:
I have two table, CURRENT and PREVIOUS.(Table Defs below).
CURRENT:
Column1 - CURR_PARENT
Column2 - CURR_CHILD
Column3 - CURR_CHILD_ATTRIBUTE 1
Column4 - CURR_CHILD_ATTRIBUTE 2
Column5 - CURR_CHILD_ATTRIBUTE 3
PREVIOUS:
Column1 - PREV_PARENT
Column2 - PREV_CHILD
Column3 - PREV_CHILD_ATTRIBUTE 1
Column4 - PREV_CHILD_ATTRIBUTE 2
Column5 - PREV_CHILD_ATTRIBUTE 3
PROBLEM STATEMENT
Here the columns 3 to 5 are the attributes of the Child. Lets assume that I have two loads, One Today which goes to the CURRENT table and one yesterday which goes to the PREVIOUS table. Between these two loads there is a CHANGE in the value for Columns either 3/4/5 or all of them(doesnt matter if one or all).
I want to determine what properties for the child have changed with the help of a MOST efficient SQL query.(PARENT+CHILD is unique key). The Database is ofcourse ORACLE.
Please help.
Regards,
ParagHi,
The last message was not posted by the same user_name that started the thread.
Please don't do that: it's confusing.
Earlier replies give you the information you want, with one row of output (maximum) per row in current_tbl. There may be 1, 2 or 3 changes on a row.
You just have to unpivot that data to get one row for every change, like this:
WITH single_row AS
SELECT c.curr_parent
, c.curr_child
, c.curr_child_attribute1
, c.curr_child_attribute2
, c.curr_child_attribute3
, DECODE (c.curr_child_attribute1, p.prev_child_attribute1, 0, 1) AS diff1
, DECODE (c.curr_child_attribute2, p.prev_child_attribute2, 0, 2) AS diff2
, DECODE (c.curr_child_attribute3, p.prev_child_attribute3, 0, 3) AS diff3
FROM current_tbl c
JOIN previous_tbl p ON c.curr_parent = p.prev_parent
AND c.curr_child = p.prev_child
WHERE c.curr_child_attribute1 != p.prev_child_attribute1
OR c.curr_child_attribute2 != p.prev_child_attribute2
OR c.curr_child_attribute3 != p.prev_child_attribute3
, cntr AS
SELECT LEVEL AS n
FROM dual
CONNECT BY LEVEL <= 3
SELECT s.curr_parent AS parent
, s.curr_child AS child
, CASE c.n
WHEN 1 THEN s.curr_child_attribute1
WHEN 2 THEN s.curr_child_attribute2
WHEN 3 THEN s.curr_child_attribute3
END AS attribute
, c.n AS attribute_value
FROM single_row s
JOIN cntr c ON c.n IN ( s.diff1
, s.diff2
, s.diff3
ORDER BY attribute_value
, parent
, child
; -
Please help with dynamic pl/sql
Trying to write a generic pl/sql package that can be used on any table I specify at runtime. The procedures are simple and there are only two. I don't understand advanced pl/sql enought to write it myself dynamically. Could someone please give me ideas on this? Because I don't know the syntax of dynamic pl/sql, books aren't helping much with a project I have due tomorrow :)
Yes, it will all be done at the same time, but I would like them to be able to run independent of each other in case i want one and not the other and vice versa. In procedure 1, the only thing to be done is to get the text in column_1 of tableA to column_1 in tableB.
I have a regular procedure for procedure 1 that I think will work:
CREATE OR REPLACE PROCEDURE UPDATE_COLUMN_1
IS
v_column_1 tableB.column_1%TYPE;
v_name tableC.name%TYPE;
CURSOR c_name_column_1 IS
SELECT column_1, name from tableA;
BEGIN
OPEN c_name_column_1;
LOOP
Fetch c_name_column_1 INTO v_column_1, v_name;
EXIT WHEN c_name_column_1%NOTFOUND;
UPDATE tableB
SET column_1 = v_column_1,
lst_updt = sysdate,
updt_by = 'anna'
WHERE name = v_name;
END LOOP;
CLOSE c_name_column_1;
END UPDATE_COLUMN_1;
My main email is in my husband's name. I will get it faster than my hotmail account. [email protected] -
Help with Oracle PL/SQL and Objects...
Hi,
I wonder if you can help me, I am having some trouble dealing with Oracle objects in PL/SQL. I can declare them, populate them and read from them without any issues.
But I am having some problems with trying to copy records in to other records of the same type, and also with updating existing records. I've made a mock up piece of code below to explain what I mean, it may have a few mistakes as I've written it in notepad but should be reasonably clear.
First I have created a record type, which contains attributes relating to a person.....
CREATE OR REPLACE
TYPE PERSON_RECORD_TYPE AS object (
Person_ID NUMBER(3),
Person_Name VARCHAR(20),
Person_Age NUMBER(2),
static function new return PERSON_RECORD_TYPE );
CREATE OR REPLACE
TYPE BODY PERSON_RECORD_TYPE as
static function new return PERSON_RECORD_TYPE is
BEGIN
return PERSON_RECORD_TYPE (
NULL,
NULL,
NULL,
NULL,
NULL
END;
END;
Then I have created a table type, which is a table of the person record type......
CREATE OR REPLACE
type PERSON_TABLE_TYPE as table of PERSON_RECORD_TYPE;
Finally I have created a procedure which recieves an instance of the person table type and reads through it using a cursor.....
PROCEDURE ADMIN_PERSON (incoming_person IN PERSON_TABLE_TYPE)
IS
-- This is a local record declared as the same type as the incoming object
local_person PERSON_TABLE_TYPE;
-- Cursor to select all from the incoming object
CURSOR select_person
IS
SELECT *
FROM TABLE ( cast (incoming_person AS PERSON_TABLE_TYPE));
BEGIN
-- Loop to process cursor results
FOR select_person_rec IN select_person
LOOP
/* Up to this point works fine...*/
-- If I want to store the current cursor record in a local record of the same type, I can do this....
local_person.person_id := select_person_rec.person_id;
local_person.person_name := select_person_rec.person_name;
local_person.person_age := select_person_rec.person_age;
-- QUESTION 1
-- The above works fine, but in my real example there are a lot more fields
-- Why cant I set the local record to the value of the cursor record like this below..
local_person := select_person_rec;
-- The above line gives a pl/sql error - expression is of wrong type, (as far as I can see the records are of the same type?)
-- QUESTION 2
--Also how do you update an existing record within the original object, I have tried the following but it does not work
UPDATE incoming_person
SET age = (age + 1)
WHERE incoming_person.person_id = '123';
-- The error here is that the table does not exist
END LOOP;
END;
So I hope that you can see from this, I have two problems. The first is that I can store the current cursor record in a local record if I assign each attribute one at a time, but my real example has a large number of attributes. So why can't I just assign the entire cursor record to the local cursor record?
I get a PL/SQL error "Expression is of wrong type" when I try to do this.
The second question is with regards to the update statement, obviously this doesn't work, it expects a table name here instead. So can anyone show me how I should update existing person records in the incoming table type to the procedure?
I hope this makes sense, but I don't think I have explained it very well!!
Any help will be gratefully recieved!!
ThanksI understand why you are having trouble - my own brain started to hurt looking at your questions :)
First off, database types are not records. They can act like records but are "objects" with different characterstics.
You can create a record in PL/SQL but the "type" is of RECORD. You created an OBJECT as BODY_PERSON_RECORD_TYPE.
I don't use database types unless I really need them, such as for working with pipelined functions.
-- QUESTION 1
-- The above works fine, but in my real example there are a lot more fields
-- Why cant I set the local record to the value of the cursor record like this below..
local_person := select_person_rec; local_person is set to the (misnamed) BODY_PERSON_RECORD_TYPE, while SELECT_PERSON_REC is anchored to the cursor and is a RECORD of SELECT_PERSON%ROWTYPE with a field for each column selected in the query. Different types, not compatible.
You should be able to manually assign the object items one by one as object.attribute := record.field one field at a time.
-- QUESTION 2
--Also how do you update an existing record within the original object, I have tried the following but it does not workCheck the on-line documentation for the syntax. You'll probably have to reference the actual value through the table; this is one reason why I don't work with nested tables - the syntax to do things like updates is much more complex. -
Continuation-Please help with a complex sql query
Hi all,
Thanks a lot for your suggestions and inputs in the last thread of this post.
With the help of your suggested approach,i went ahead and was able to get some more data in the format as needed..I worked on gradually adding one table after another exactly as the data is required stepwise.But,still I am facing issues with displaying them.
there are many issues I am not able to do and would appreciate if you please have a look at my latest modified SELECT given below and help me writing it to get the display as needed.
Below,is the attempted query i tried out using your inputs.But,am stuck and need your help in writing it.
**Here,there is 1 ->MANY lines for the t_objective_id--->This has many learning_record_ids which i want to group by the unique objective_id.
Also,prior to that,there is a tplan_id---->which has MANY t_objective_id's
SELECT DECODE (LAG (firstname, 1, 0) OVER (ORDER BY firstname),
firstname, ' ',
firstname
) firstname,
DECODE (LAG (emplid, 1, 0) OVER (ORDER BY emplid),
emplid, ' ',
emplid
) emplid,
DECODE (LAG (tplan_name, 1, 0) OVER (ORDER BY tplan_name),
tplan_name, ' ',
tplan_name
) tplan_name,
tplan_id,
DECODE (LAG (activities, 1, 0) OVER (ORDER BY activities),
activities, ' ',
activities
) activities,
activities,
--activities,
DECODE (LAG (t_objective_id, 1, 0) OVER (ORDER BY t_objective_id),
t_objective_id, ' ',
t_objective_id
) t_objective_id,
completed_activities,required_credits,
DECODE (LAG (learning_record_id, 1, 0) OVER (ORDER BY learning_record_id),
learning_record_id, ' ',
learning_record_id
) learning_record_id,
catalog_item_name,catalog_item_type
FROM (SELECT test_cp.firstname, test_op.emplid, tp.tplan_name,tp.tplan_id,FN_TP_GET_CMPLTD_ACT_CNT(tp.tplan_id,test_lp.lp_person_id,'1862') activities,
test_tpo.t_objective_id,
( fn_tp_obj_comp_req_act_cdt (test_lp.lp_person_id,
tp.tplan_id,
test_tpo.t_objective_id,
tp.is_credit_based
+ fn_tp_obj_comp_opt_act_cdt (test_lp.lp_person_id,
tp.tplan_id,
test_tpo.t_objective_id,
tp.is_credit_based
) completed_activities,test_tpo.required_credits,lr.learning_record_id,lr.catalog_item_name,lr.catalog_item_type
FROM test_learning_plan test_lp,
test_training_plan tp,
test_person test_cp,
test_org_person test_op,test_tp_learning_activity test_tplplr,
test_tp_objective test_tpo,test_learning_record lr,test_train_obj_activity tpobjact
WHERE test_lp.lp_person_id = '1862188559'
AND test_cp.person_id = test_lp.lp_person_id
AND tp.tplan_id = 'tplan200811200632352287621599'
AND test_tpo.t_objective_id = tpobjact.t_objective_id
AND test_lp.LP_CATALOG_HIST_ID = tp.tplan_id
AND test_tplplr.tp_lp_lr_id =test_lp.learning_plan_id
AND test_tplplr.activity_lp_lr_id = lr.learning_record_id
AND lr.LR_CATALOG_HISTORY_ID = tpobjact.activity_id
AND test_op.o_person_id = test_cp.person_id
AND test_tpo.tplan_id = tp.tplan_id)
If we see the outer SELECT ---then one of the main issues is for EACH t_objective_id----->There are n learning_record_ids.
But,this select only shows 1 learning_record_id for each objective_id which is wrong.
Similarly,the data displayed isnot proper.
Below is the way I am getting the data now from the above SELECT.
Note:- FIRSTNAME is not correctly displayed.
FIRSTNAME EMPLID TPLAN_NAME TPLAN_ID ACTIVITIES ACTIVITIES_1
001 TP1 tplan1 5 5
TESTNAME tplan1 5
Continuation of the other columns of the same rows--**couldnt paste it properly so.
T_OBJECTIVE_ID COMPLETED_ACTIVITIES REQUIRED_CREDITS LEARNING_RECORD_ID CATALOG_ITEM_NAME CATALOG_ITEM_TYPE
obj1 1 5 lr1 C1 Course
obj2 4 4Something like this might solve your problem ->
satyaki>
satyaki>select * from v$version;
BANNER
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
Elapsed: 00:00:00.00
satyaki>
satyaki>
satyaki>select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7521 WARD SALESMAN 7698 22-FEB-81 226.88 500 30
7654 MARTIN SALESMAN 7698 28-SEP-81 1815 1400 30
7788 SCOTT ANALYST 7566 19-APR-87 598.95 20
7839 KING PRESIDENT 17-NOV-81 7260 10
7844 TURNER SALESMAN 7698 08-SEP-81 2178 0 30
7876 ADAMS CLERK 7788 23-MAY-87 159.72 20
7900 JAMES CLERK 7698 03-DEC-81 1379.4 30
7902 FORD ANALYST 7566 03-DEC-81 5270.76 20
7934 MILLER CLERK 7782 23-JAN-82 1887.6 10
7566 Smith Manager 7839 23-JAN-82 1848 0 10
7698 Glen Manager 7839 23-JAN-82 1848 0 10
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7599 BILLY ANALYST 7566 10-JUN-09 4500 30
12 rows selected.
Elapsed: 00:00:00.00
satyaki>
satyaki>
satyaki>
satyaki>
satyaki>select decode(lag(job,1,null) over(order by job),'CLERK','CK',
2 'SALESMAN', 'SM',
3 'ANALYST','AL',
4 'BO') res
5 from emp;
RE
BO
AL
AL
AL
CK
CK
CK
BO
BO
BO
SM
RE
SM
12 rows selected.
Elapsed: 00:00:00.01
satyaki>
satyaki>
satyaki>select MAX(decode(lag(job,1,null) over(order by job),'CLERK','CK',
2 'SALESMAN', 'SM',
3 'ANALYST','AL',
4 'BO')) res
5 from emp;
select MAX(decode(lag(job,1,null) over(order by job),'CLERK','CK',
ERROR at line 1:
ORA-30483: window functions are not allowed here
Elapsed: 00:00:00.01
satyaki>
satyaki>select MAX(res)
2 from (
3 select decode(lag(job,1,null) over(order by job),'CLERK','CK',
4 'SALESMAN', 'SM',
5 'ANALYST','AL',
6 'BO') res
7 from emp
8 );
MA
SM
Elapsed: 00:00:00.00
satyaki>
satyaki>Regards.
Satyaki De. -
Need Help with Formula using SQL maybe
I need help! I work with Crystal reports XI and usually manage just fine with the Formula editor but his one I think will require some SQL and I am not good at that.
We are running SQL 2000 I think (Enterprise Manager 8.0) Our sales people schedule activities and enter notes for customer accounts. Each is stored in a separate table. I need to find activities that are scheduled 240 days into the future and show the most recent note that goes with the account for which that activity is scheduled.
The two tables, Activities and History, share the an accountID field in common that links them to the correct customer account. I want to look at dates in the Startdate.Activities field more than 240 days in the future and show the most recent note from the History table where the accountid's match. I figure my query will contain a join on AccountID.Activities and AccountID.History used with Max(completedate.History) but I do not understand how to word it.
I would like to perform all this in crystal if possible. I humbly request your help.
MemberyYou SQL would look something like this...
SELECT
a.AccountID,
a.BlahBlahBlah, -- Any other fields you want from the Activities table
h.LastComment
FROM Activities AS a
LEFT OUTER JOIN History AS h ON a.AccountID = h.AccountID
WHERE (a.ActivityDate BETWEEN GetDate() AND DateAdd(dd, 240, GetDate()))
AND h.HistoryID IN (
SELECT MAX(HistoryID)
FROM History
GROUP BY AccountID)
This method assumes that the History table has a HistoryID that increments up automatically each time a new comment is added... So a comment made today would always have a higher HistoryID that one made yesterday.
If I'm wrong and there is no HistoryID or the HistoryID doesn't increment in a chronological fashion, it can still be done but the code is a bit more complex.
HTH,
Jason -
Hey I'm trying to get a working understanding of some of the basics behind SQL, I've composed a few questions that I think may help me with this. Anyone that can help me with any of them will greatly help me thanks.
1. How to create synonym for tables?
2. How to describe the structure of tables?
3. How to list the contents of tables?
4. How to create a table named with the same structure as another table?
5. How to copy rows with less than a certain criteria in value (e.g. Price<$5.00) into another table?
6. How to change the data type to e.g. NUMBER(6)?
7. How to add a new column named with data type e.g. VARCHAR2(10)?
8. How to change a specific field within a table (e.g. For ORDER_NUMBER 12489, change the C_NUMBER to 315)?
9. How to delete a specific row from a table?
10. How to declare a column as the primary key of a table and call it e.g. PK_something?
11. How to show certain columns when another column is less than a certain criteria in value (e.g. Price<$5.00)?
12. How to show certain columns with another column having a certain item class e.g. HW or AP?
13. How to list certain columns when another column e.g. price is between two values?
14. How to list certain columns when another column e.g. price is negative?
15. How to use the IN operator to find certain columns (e.g. first and last name of customers who are serviced by a certain ID)
16. How to find certain columns when one of the columns begins with a particular letter (e.g. A)
18. How to list the contents of the a table sorted in ascending order of item class and, within each item class, sorted in descending order of e.g. price?
19. How to do a count of column in a table?
20. How to sum a column and make rename is something?
21. How to do a count of a column in a table (without repeats e.g. if a certain number repeats more than once than to only count it once)?
22. How to use a subquery to find certain fields in columns when the another column’s fields values are greater than e.g. its average price?848290 wrote:
Hey I'm trying to get a working understanding of some of the basics behind SQL, I've composed a few questions that I think may help me with this. Anyone that can help me with any of them will greatly help me thanks.To use the terminology you have in those questions, you must already have a basic understanding of SQL, so you have exposed yourself as not being the author of such questions.
Please do not ask homework questions without having at least attempted to answer them yourself first and show where you're struggling. -
Help with using dynamic sql logic in a view please?
Greetings,
I want to create a dynamic union using all the databases on server. The following works:
declare @sqlvarchar(max)
select
@sql=IsNull(@sql+'union
all ','')+'select
* from '+name+'.[dbo].[A]''
inner join '+name+'.[dbo].[B]'' on
a.f1=b.f1'
from
sys.databases
where
name
in(select
name
from
sys.databases)
exec
(@sql)
The problem is I need something tangible, like a view, to query using SSAS later. I've tried to use SELECT into to load a new table with a resulting dataset. It gives me a syntax error - the dynamic part can't be combined with static. I can't use OPENQUERY
because it all happens on the same server. Assistance would be appreciated. ThanksWell, you could regenerate the view each time a database is created or dropped.
Or you can define your cube using an empty view and load the cube using SSIS, eg with
Dimension Processing Destination.
Or you can use something like a CLR TVF inside your view.
David
David http://blogs.msdn.com/b/dbrowne/ -
Need help with this pl/sql block
hi iam preparing for 1z0-001 exam..iam not able to figure out this .plz help
Which line in the following PL/SQL block will raise an exception?
1 TYPE emp_typ is RECORD (
emp_no VARCHAR2(20),
name scott.emp.name%TYPE);
2 emp_rec emp%ROWTYPE;
3 BEGIN
4 SELECT * INTO emp_rec FROM emp
WHERE emp_no=12;
5 emp_rec.emp_no := emp_seq.nextval;
6 INSERT INTO emp VALUES (emp_rec);
7 END;
1. Line 1
2. Line 2
3. Line 4
4. Line 6
ans:D. sybex text book
how is it possible??/
thank u
rajiv0. "DECLARE" is missing (or CREATE PROCEDURE...)
1a. emp_typ is declared but never used. Not strictly an error but suspicious.
1b. In the code, emp_no is a number but is declared here as a varchar2. Yuck.
2. fine.
3. fine.
4. fine.
5. You can't directly assign a sequence like this. It must be part of a sql statement.
6. Omit the parentheses around emp_rec. -
Help With Dynamic PL/SQL LOV Syntax
Hello
I am trying to create a dynamic pl/sql lov in Oracle Apex 3.2 on 11g. I am having some issues with the syntax of the statements below and I'd appreciate any suggestions.
DECLARE
BEGIN
IF :p3_current_a_workshop != 0 THEN
RETURN
'select distinct workshop_title ||': ' || presenter_name ||' $'|| workshop_fee display_value, workshop_id return_value
from WORKSHOP
where session_time = 'A'
and workshop_status = 'Open'
or workshop_id = :p3_current_a_workshop
order by 1';
ELSE
RETURN
'select distinct workshop_title ||': ' || presenter_name ||' $'|| workshop_fee display_value, workshop_id return_value
from WORKSHOP
where session_time = 'A'
and workshop_status = 'Open'
order by 1';
END IF;
EXCEPTION
WHEN OTHERS THEN
HTP.PRN('ERROR'||SQLERRM);
END;I am trying to model the above code off of the example given by apex:
A function that returns a SQL query with two columns:
IF :MY_ITEM='10' THEN
RETURN
'SELECT ename, empno
FROM emp
WHERE depno = 10
ORDER BY 1';
ELSE
RETURN
'SELECT ename, empno
FROM emp
WHERE depno = :my_item
ORDER BY 1';
END IF;~Andrew SchultzHi Andrew,
Try something like:
DECLARE
BEGIN
IF :p3_current_a_workshop != 0 THEN
RETURN
' select distinct workshop_title ||'': '' || presenter_name ||'' $''|| workshop_fee display_value, workshop_id return_value '||
' from WORKSHOP '||
' where session_time = ''A'' '||
' and workshop_status = ''Open'' '||
' or workshop_id = :p3_current_a_workshop '||
' order by 1 ';
ELSE
RETURN
' select distinct workshop_title ||'': '' || presenter_name ||'' $''|| workshop_fee display_value, workshop_id return_value '||
' from WORKSHOP '||
' where session_time = ''A'' '||
' and workshop_status = ''Open'' '||
' order by 1 ';
END IF;
EXCEPTION
WHEN OTHERS THEN
HTP.PRN('ERROR'||SQLERRM);
END;Regards,
Lev
Maybe you are looking for
-
Photos showing up in Wallpaper Photo Album, but not Main Photo Album
I just switched to iPhone - love it. Just transferred all of my photos from my old device into my iPhone via iTunes. They show they are in the iPhone when I check the iTunes capacity at the bottom, and they all show up as options for my wallpaper in
-
How to determine the size of an iMovie09 project?
Hello: I recently created a nice video of about 2 hours in iMovie09. I "shared" it to iDVD but it was about 10% too big to burn. I went back to iMovie09 and removed some time to make the project smaller but how can I determine the size of my iMovie09
-
[W520] DisplayPor​t to dual outputs for 3 external monitors
I just discovered DisplayPort dual output adapters. Example: DisplayPort to dual DisplayPort, Lenovo brand. DisplayPort to dual HDMI (currently out of stock). Currently I'm using my laptop display plus two external monitors with one using VGA and th
-
Former PC User Switching To MacBook Pro... Some Questions
Hey all. Sorry for the newbie question, but I could use some advice. I am a long-time PC user and have finally decided to switch to a MacBook Pro. I am scheduled for a tutorial/purchasing session at the Apple Store on Sunday. Here are my main questio
-
The phone was working normally for almost 2 years, but the last few days it doesn't ring and nobody can reach me. Help please?