标签: plsql

Oracle滞后函数,它可以接受列别名吗?

我正在尝试使用滞后函数,因此我可以在不使用游标的情况下将一列与最后一列进行比较.但是,我需要比较的列必须使用别名,因为我正在使用3个联合.这是我要做的一个例子.

SELECT
'Y' AS paid,
 lag(paid,1) over (ORDER BY salary) AS prev_paid
FROM pay
UNION 
SELECT 
  'N' as paid,
  lag(paid,1) over (ORDER BY salary) AS prev_paid
FROM not_paid
Run Code Online (Sandbox Code Playgroud)

我一直收到错误:PL/SQL:ORA-00904:"付费":无效的标识符

oracle plsql lag

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

无法理解简单的Pl/SQL函数中的警告

我正在使用Oracle 10g和SqlDeveloper.当我执行以下代码时,它说

"功能wafadar编译警告:执行完成并发出警告"

create or replace function wafadar
return varchar2(10)
is

cursor c1 is
SELECT employee_id,first_name FROM employees where department_id=50 ;

begin
  for i in c1
  loop
    dbms_output.put_line(i.first_name);
  end loop;
  return 'hello';
end;
Run Code Online (Sandbox Code Playgroud)

最后显示的错误也没有显示警告.为什么会有警告?

plsql

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

基于特定字符串匹配中断字符串

我在Oracle中有以下字符串作为一个连续的行,而不是将此信息显示为一个连续的字符串,我实际上想要在出现":F"和":L"之前追加一个回车符/换行符,还需要在F和L之前删除":"

所以当前字符串:

F:AA BB:F:BB CC dd:F:ZZ Xx Y:L:Hello:F:Goodbye
Run Code Online (Sandbox Code Playgroud)

新显示的字符串:

F:AA BB
F:BB CC dd
F:ZZ Xx Y
L:Hello
F:Goodbye
Run Code Online (Sandbox Code Playgroud)

试图在Oracle pl/sql中将其作为一个简洁的函数来实现,这样我就可以传入当前字符串并返回带有回车符/新换行符的新字符串.

regex oracle plsql oracle10g

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

oracle LAST_DAY(sysdate)比较问题

假设我有一个Date列,其日期为31-JUL-2011.我使用返回31-JUL-11的LAST_DAY(sysdate)得到了当月的最后一个日期.但是当我做一个简单的=比较它没有给出结果..我的意思是假设tablename.lastdateofmonth = LAST_DAY(sysdate)它不给出结果但是如果我使用tablename.lastdateofmonth = to_date('2011/07/31' ,'yyyy/mm/dd')它给出了结果.

谢谢.

sql database oracle plsql

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

Oracle SQL:比较2列中的所有值并进行交换

我有一个名为Oracle的Oracle DB myC.在这张表中,我有几行,其中两行被称为myCheight, myCwidth.

我需要读取这些值并比较它们 IF myCheight > myCwidth DO switch the values.

我试图从一行读取值,但没有让它工作.我使用Oracles Oracle SQL Developer.

这是我到目前为止提出的:

set serveroutput on;
DECLARE 
  cursor h is select * from MyC;
  type htype is table of h%rowtype index by number;

  stage_tab htype;
  master_tab htype;
BEGIN 
  open h;
  loop  
      fetch h bulk collect into stage_tab limit 500;

      for i in 1 .. stage_tab.count loop
          master_tab(stage_tab(i).id) := stage_tabe(i);
      end loop;

      exit when h%notfound;
  end loop;
  close h;

end;
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql if-statement cursor

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

ORA-06550为什么我无法在Oracle中的if-else中创建索引

我不是PL/SQL的家人.任何人都可以解释为什么我不能做以下事情?

BEGIN
  IF TRUE THEN
    CREATE INDEX TestIndex ON SomeTable (SomeColumn);
  END IF;
END;
Run Code Online (Sandbox Code Playgroud)

我会收到以下错误:

错误报告:ORA-06550:第3行,第5列:PLS-00103:当遇到以下情况之一时遇到符号"CREATE":如果循环mod为空pragma raise返回选择更新,则使用<<开关大小写声明退出当前删除fetch lock insert open rollback savepoint set sql execute commit forall merge pipe 06550. 00000 - "line%s,column%s:\n%s"*原因:通常是PL/SQL编译错误.*行动:

我可以通过传递此错误的唯一方法是动态sql:

BEGIN
  IF TRUE THEN
    EXECUTE IMMEDIATE 'CREATE INDEX TestIndex ON SomeTable (SomeColumn)';
  END IF;
END;
Run Code Online (Sandbox Code Playgroud)

oracle plsql

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

在PL/SQL Developer中运行的日期查询显示时间,但在Oracle SQL Developer中不显示

在PL/SQL Developer中运行的同一查询显示时间,但它没有在Oracle SQL Developer中显示.有没有办法在SQL Developer中获得时间?

在SQL Developer中: 在此输入图像描述

在PL/SQL中:

在此输入图像描述

这是日期字段的详细信息:

在此输入图像描述

plsql plsqldeveloper oracle-sqldeveloper

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

Oracle SQL*Plus ACCEPT语句

我需要一些SQL*Plus脚本的帮助.有没有什么方法可以让它接受一个变量,检查表是否匹配,如果它发现它退出程序而不继续其余的接受语句?

到目前为止我有这个代码:

ACCEPT p_cname PROMPT 'Enter Customer Name: '
DECLARE
     v_cname CHAR(20);
BEGIN
     SELECT cname INTO v_cname
            FROM customer
     WHERE cname = '&p_cname';

     IF v_name = '&p_cname' THEN
            -- Exit the program
     END IF;
END;
/

-- Other ACCEPT statements if a match was not found.
Run Code Online (Sandbox Code Playgroud)

如果找到匹配项,我不希望它继续使用程序的其余部分.有没有办法做到这一点?

sql database oracle plsql sqlplus

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

获取ORA-06503的原因:PL/SQL:函数返回没有值?

所以我正在开发一个Web服务,它将使用两个调用数据库的函数从数据库中获取数据.我们的目标是让它如果其中一个参数中有特定值,那么就说

            bool x= false;
        if ( "Y".Equals( parameterValve, StringComparison.InvariantCultureIgnoreCase ) )
            x= true;
                    if ( x)
                        cmd.Parameters.Add( "function_call1", OracleType.Cursor ).Direction = ParameterDirection.Output;  
                    else
                        cmd.Parameters.Add( "function_call2", OracleType.Cursor ).Direction = ParameterDirection.Output;                      
                        try
                        {
grab data here
}
return to webservice
Run Code Online (Sandbox Code Playgroud)

我已经完成了所有这些设置,它适用于第一个参数.但是,当我使用第二个参数调用调用webservice时,我收到此错误.

System.Data.OracleClient.OracleException: ORA-06503: PL/SQL: 
Function returned without value
ORA-06512: at "database.package", line 103
ORA-06512: at line 1
Run Code Online (Sandbox Code Playgroud)

我的问题是这个错误发生的原因究竟是什么?是因为我正在调用函数不正确或者函数调用本身是否有错误?

基本上我已经盯着这段代码了一段时间,现在试图弄清楚我做错了什么,所以我希望有人能够指出我正确的方向,我应该在哪里纠正这个错误.

非常感谢任何帮助或建议.

谢谢!

c# sql plsql web-services

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

跟踪序列为多个插入创建的所有值

在PL SQL中,我正在编写一个使用DB链接的存储过程:

CREATE OR REPLACE PROCEDURE Order_Migration(us_id IN NUMBER, date_id in DATE) 
as 
begin
  INSERT INTO ORDERS(order_id, company_id)
  SELECT ORDER_ID_SEQ.nextval, COMPANY_ID 
  FROM ORDERS@SOURCE
  WHERE USER_ID = us_id  AND DUE_DATE = date_ID;   
end;  
Run Code Online (Sandbox Code Playgroud)

它会在特定日期由特定用户完成所有订单并将其插入新数据库中.它调用一个序列来确保订单上没有重复的PK,并且效果很好.

但是,我希望使用相同的过程对另一个将order_id作为外键的表执行第二次INSERT.所以我需要添加刚刚创建的所有order_id,以及来自SOURCE的匹配数据:

INSERT INTO  ORDER_COMPLETION(order_id, completion_dt)
SELECT ????, completion_dt                    
FROM ORDER_COMPLETION@SOURCE
Run Code Online (Sandbox Code Playgroud)

如何跟踪刚刚创建的order_id与我需要从源数据库中提取数据的order_id相匹配?

我考虑制作一个临时表,但你不能在程序中创建它们.

其他信息:我将从我正在编写的C#应用​​程序中调用此过程

oracle plsql stored-procedures dblink sequence

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