标签: plsql

帮助从多个表构建SQL查询

给定下面的表格,我如何构建一个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)

sql oracle plsql pivot oracle11g

0
推荐指数
1
解决办法
1985
查看次数

ORA-01756:引用的字符串未正确终止

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 plsql

0
推荐指数
1
解决办法
2万
查看次数

SQL注入,最简单的解决方案

如果我只是用双引号替换所有传入的单引号,我不确定有人会破坏我的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"

更新:斜杠'\'是应用程序中的受限字符,在查询中使用之前将被删除.双短划线可以很容易地添加到受限字符列表中.

sql t-sql sql-server oracle plsql

0
推荐指数
1
解决办法
794
查看次数

优化查询运行时间太长

我使用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)

sql oracle optimization plsql

0
推荐指数
1
解决办法
3561
查看次数

使用包从Oracle表中查询多行

我写了一个包来查询表中的行.此选择查询将调用其他函数并返回表中的所有行.但是当我编写一个包含所有函数和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 oracle plsql stored-procedures oracle10g

0
推荐指数
1
解决办法
3165
查看次数

Oracle存储过程/函数加载顺序

我在文件夹中有许多存储过程和函数.我有一个批处理文件循环遍历文件夹中的.sql文件,并将文件名写入单个SQL文件以供执行.在此之后,批处理文件在SQLPlus中执行单个文件.我遇到的问题是创建存储过程和函数的顺序.我收到编译错误,因为存储过程C需要函数A来执行,但是存储过程C是在函数A之前创建的.有没有办法绕过它而不排序存储过程和函数?我的假设是没有,但我想在开始订购脚本之前确定.

sql oracle plsql

0
推荐指数
1
解决办法
795
查看次数

在Oracle存储过程中运行查询

我有一个问题

select * from myTable
Run Code Online (Sandbox Code Playgroud)

...我希望将此查询包装在存储过程中,并让存储过程输出此查询的结果.

我该怎么做?

在ms-sql中,我可以将查询作为字符串存储到字符串变量中.然后执行"执行(变量)".为什么Oracle中没有这样的东西?

sql oracle plsql

0
推荐指数
1
解决办法
7843
查看次数

显式打开和关闭游标

我一直在阅读数据库游标,我看到的每一个示例代码都明确打开并关闭游标.我只使用过几次而且我从来没有这样做过.谁能告诉我为什么有必要这样做?我知道如果你不关闭光标你可以创建内存泄漏,但我从来没有打开过.

谢谢

database oracle plsql cursors

0
推荐指数
1
解决办法
805
查看次数

ORA-04091在xxx上插入更新之前创建或替换触发器xxx

有人可以帮我纠正下面的触发器吗?我被分配了这个问题,但我的技术技能有限.

我的脚本点击了下面的错误(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)

oracle triggers plsql exception ora-04091

0
推荐指数
1
解决办法
5680
查看次数

游标 - 即使返回行,%notfound也为true

我有一个光标,用于获取一些其他处理的初步信息.支持游标的查询可能不会返回任何行,在这些极少数情况下,我们希望引发一个特殊的异常(在别处处理和记录,因此处理不会被强制停止),以便用户知道什么是最有可能的输入不好.这是它的样子:

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语句始终执行,因此即使返回行,也始终引发异常.我不知道为什么.如果有更好的方法来处理这种逻辑,我也会对此持开放态度;)

oracle plsql cursors

0
推荐指数
2
解决办法
2万
查看次数