给定下面的表格,我如何构建一个SQL查询,其中包含"items"表中所有项目的列表,以及"colors"表中每种颜色的列,对于列出的每个项目,它指示的是什么颜色item与...有关系.
如果不清楚,请告诉我哪些其他信息有助于澄清.表信息和所需的SQL结果如下:
物品表:
id | item_name
1 | 'item 1'
2 | 'item 2'
3 | 'item 3'
Run Code Online (Sandbox Code Playgroud)
颜色表:
id | color_name
1 | 'red'
2 | 'blue'
3 | 'green'
Run Code Online (Sandbox Code Playgroud)
item_color表:
item_id | color_id
1 | 1
1 | 3
2 | 2
2 | 3
3 | 2
Run Code Online (Sandbox Code Playgroud)
期望的SQL查询结果:
item_name | red | blue | green
'item 1' | 1 | null | 1
'item 2' | null| 1 | 1
'item 3' | null| 1 | null …Run Code Online (Sandbox Code Playgroud) please let me know the issue with following script (sql,oracle 10g)
1 DECLARE @colname AS NVARCHAR(50)
2 DECLARE @tablename AS NVARCHAR(500)
3 DEClARE @query AS NVARCHAR(500)
4 SET @colname = 'select wk_units1 from cnt_sls_dm.fct_sales_summary'
5 SET @tablename = 'SELECT tablename from dmi_user.fct_sales_meta'
6 set @query='select '+@colname+' FROM '+@tablename+'
7* EXECUTE sp_executesql @query
SQL> /
ERROR:
ORA-01756: quoted string not properly terminated
Run Code Online (Sandbox Code Playgroud) 如果我只是用双引号替换所有传入的单引号,我不确定有人会破坏我的SQL.有人可以启发我的Oracle和SQL Server示例吗?谢谢.
string sql1 = "select * from users where user_id = '" + "O'Reily".Replace("'", "''").Replace("\", "") + "'";
Run Code Online (Sandbox Code Playgroud)
==>"从user_id ='O''Reily'的用户中选择*
string sql2 = "select * from users where user_id = '" + "O'''Reily".Replace("'", "''").Replace("\", "") + "'";
Run Code Online (Sandbox Code Playgroud)
==>"select*from users user_id ='O''''''Reily"
更新:斜杠'\'是应用程序中的受限字符,在查询中使用之前将被删除.双短划线可以很容易地添加到受限字符列表中.
我使用toad for Oracle来运行一个运行时间太长的查询,有时超过15分钟.
该查询正在提取备忘录,这些备忘录将由经理批准.查询没有带回很多行.通常,当它运行时,它将返回大约30或40行.查询需要访问几个表以获取其信息,因此我使用了很多连接来获取此信息.
我在下面附上了我的查询.如果有人可以帮助优化这个查询,我会非常非常好.
查询:
SELECT (e.error_Description || DECODE(t.trans_Comment, 'N', '', '','', ' - ' || t.trans_Comment)) AS Title,
t.Date_Time_Recorded AS Date_Recorded,
DECODE(t.user_ID,0,'System',(SELECT Full_Name FROM employee WHERE t.user_Id = user_id)) AS Recorded_by,
DECODE(t.user_ID,0, Dm_General.getCalendarShiftName(t.Date_Time_Recorded), (SELECT shift FROM employee WHERE t.user_Id = user_id)) AS Shift,
l.Lot_Number AS entity_number,
ms.Line_Num,
'L' AS Entity_Type,
t.entity_id, l.lot_Id AS Lot_Id
FROM DAT_TRANSACTION t
JOIN ADM_ERRORCODES e ON e.error_id = t.error_id
JOIN ADM_ACTIONS a ON a.action_id = t.action_id,
DAT_LOT l
INNER JOIN Status s ON …Run Code Online (Sandbox Code Playgroud) 我写了一个包来查询表中的行.此选择查询将调用其他函数并返回表中的所有行.但是当我编写一个包含所有函数和sprocs的包时,我的带有select语句的sproc给了我一个错误,说我不能在没有语句的情况下执行.但如果我使用它然后它将只返回一行.如何使用oracle sp检索所有行?
Procedure GetData As
BEGIN
Select Jobid, JobName, JobLocation, JobCompany, X(jobid) FROM jobsTable; END GetData;
END;
Run Code Online (Sandbox Code Playgroud)
我不得不改变它以使错误消失:
Procedure GetData As
r_Jobid jobsTable.jobid%type;
r_JobName jobsTable.jobName%type;
r_JobLocation jobsTable.jobLocation%type;
r_temp varhar2(10);
BEGIN
Select Jobid, JobName, JobLocation, JobCompany, X(jobid)
INTO r_jobid, r_jobName, r_jobLocation, r_temp
FROM jobsTable;
END GetData;
END;
Run Code Online (Sandbox Code Playgroud) 我在文件夹中有许多存储过程和函数.我有一个批处理文件循环遍历文件夹中的.sql文件,并将文件名写入单个SQL文件以供执行.在此之后,批处理文件在SQLPlus中执行单个文件.我遇到的问题是创建存储过程和函数的顺序.我收到编译错误,因为存储过程C需要函数A来执行,但是存储过程C是在函数A之前创建的.有没有办法绕过它而不排序存储过程和函数?我的假设是没有,但我想在开始订购脚本之前确定.
我有一个问题
select * from myTable
Run Code Online (Sandbox Code Playgroud)
...我希望将此查询包装在存储过程中,并让存储过程输出此查询的结果.
我该怎么做?
在ms-sql中,我可以将查询作为字符串存储到字符串变量中.然后执行"执行(变量)".为什么Oracle中没有这样的东西?
我一直在阅读数据库游标,我看到的每一个示例代码都明确打开并关闭游标.我只使用过几次而且我从来没有这样做过.谁能告诉我为什么有必要这样做?我知道如果你不关闭光标你可以创建内存泄漏,但我从来没有打开过.
谢谢
有人可以帮我纠正下面的触发器吗?我被分配了这个问题,但我的技术技能有限.
我的脚本点击了下面的错误(ORA 4091):
处理标准采购订单编号:27179
......................................
更新PO状态..
完成批准处理.
dist id 611294gl金额10000.88 bill_del_amount 0 l_amount 10000.88
发生了一些异常**ORA-04091:表PO.PO_DISTRIBUTIONS_ALL正在变异,
触发器/功能可能看不到它**
ORA-06512:在"APPS.XXAET_PO_DELIVER_TO_TRG",
第22行
ORA-01403:未找到任何数据
ORA-04088:执行触发期间出错
"APPS.XXAET_PO_DELIVER
PL/SQL过程成功完成.
SQL>
我设法在客户端机器中找到自定义触发器,但在研究之后我无法确定sql的错误点.请帮忙!
CREATE OR REPLACE TRIGGER apps.xxaet_po_deliver_to_trg
BEFORE INSERT OR UPDATE ON po_distributions_all
FOR EACH ROW
DECLARE
l_emp_name VARCHAR2 (300);
l_sqlcode VARCHAR (30) := SQLCODE;
l_sqlerrm VARCHAR (400) := SUBSTR (SQLERRM, 1, 399);
x_profile_value VARCHAR (10) ;
BEGIN
x_profile_value := fnd_profile.value('ORG_ID');
Select Ship_To_Location_ID
INTO :NEW.Deliver_To_Location_Id
from PO_LINE_LOCATIONS_ALL
WHERE line_location_id = :NEW.line_location_id
AND ORG_ID = x_profile_value
;
EXCEPTION
WHEN …Run Code Online (Sandbox Code Playgroud) 我有一个光标,用于获取一些其他处理的初步信息.支持游标的查询可能不会返回任何行,在这些极少数情况下,我们希望引发一个特殊的异常(在别处处理和记录,因此处理不会被强制停止),以便用户知道什么是最有可能的输入不好.这是它的样子:
open c_getPrs(in_pnum);
loop
fetch c_getPrs
into r_rpmRecord;
if c_getPrs%NOTFOUND then
raise X_INVALID_PNUM;
end if;
exit when c_getPrs%rowcount > 1 /*or c_getPrs%NOTFOUND*/;
end loop;
close c_getPrs;
Run Code Online (Sandbox Code Playgroud)
问题是if语句始终执行,因此即使返回行,也始终引发异常.我不知道为什么.如果有更好的方法来处理这种逻辑,我也会对此持开放态度;)