标签: plsql

PL/SQL过程随机时间戳

我如何生成随机时间戳并将其放入var中?

谢谢,

托马索

oracle plsql date-arithmetic

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

运行Oracle Procedure只是为了锁定行,而不返回结果集

我想运行一个过程来强制行上的行锁,但我不想将结果集返回给客户端,我也不想更新任何东西.以下是过程:

CREATE OR REPLACE PROCEDURE SP_LOCK_Row
 (IDRow IN INTEGER)
IS
BEGIN
  SELECT *
  FROM TBLTable
  WHERE IDRow = IDRow 
  FOR UPDATE;
END;
Run Code Online (Sandbox Code Playgroud)

问题是我不断收到错误:PLS-00428: an INTO clause is expected in this SELECT statement.有没有办法让我锁定行而不必将结果集返回给客户端?SQL Server的等价物是:

CREATE PROCEDURE dbo.SP_LOCK_Row(
  @IDRow INT)
AS
SELECT *
FROM dbo.TBLTable WITH (UPDLOCK, ROWLOCK)
WHERE IDRow = @IDRow
Run Code Online (Sandbox Code Playgroud)

TKS

oracle plsql stored-procedures

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

比较DATE类型的值 - Oracle

有没有办法比较日期值来检查一个是否在另一个之前?例如,我如何知道哪个在以下行中排在第一位

SEQ   CREATION_DTM
--------------------
234   2011-03-26 22:59:03
235   2011-03-26 22:59:03
Run Code Online (Sandbox Code Playgroud)

上述数据的列声明为数据类型DATE.阅读它似乎DATE数据类型不存储毫秒.这是否意味着我无法比较上述两个日期以找出哪一个在另一个之前?

编辑

我在Solaris上使用Oracle 10G.

sql oracle plsql oracle10g

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

在Oracle中创建存储过程会抱怨无效变量声明

当我尝试创建这样的存储过程时:

create or replace
procedure USR_Trial
( auth out usrr.DEPARTMENT 
)
AS
BEGIN
  select authority_id 
  into auth
  from usrr where user_id='G68EF610';
END USR_Trial;
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Error(2,1): PLS-00488: invalid variable declaration:  object 'USRR.DEPARTMENT' must be a type or subtype

我怎样才能解决这个问题?

oracle plsql stored-procedures

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

Oracle 11g具有幻像连接

我的机器本地安装了11g(Windows 7 64位).

当我从oracle断开所有客户端时(即没有运行sqlplus,没有运行weblogic)然后使用sqlplus重新连接并运行以下脚本:

SQL> set linesize 120
SQL> SELECT            s.sid,
  2                    s.serial#,
  3                    s.username,
  4                    s.program
  5    from v$session s
  6    where username is not null;
       SID    SERIAL# USERNAME                       PROGRAM
---------- ---------- ------------------------------ ----------------------------------------------------------------
       134      11274 FOO                         ORACLE.EXE (J000) <-- I want to remove this connection
       139      19140 MYADMIN                        sqlplus.exe       <-- My connection
       155       8941 FOO                         ORACLE.EXE (J001) <-- I want to remove this connection
SQL>
Run Code Online (Sandbox Code Playgroud)

所以我试图以编程方式删除我用蓝色标记的连接.

我使用以下内容:

SQL> ALTER SYSTEM DISCONNECT SESSION  134,11274  IMMEDIATE;
ALTER SYSTEM DISCONNECT SESSION …
Run Code Online (Sandbox Code Playgroud)

oracle plsql oracle11g

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

批量编译pl/sql程序

当我从开发转向生产或发布变更请求时,我有很多需要编译的软件包.

现在,我们使用toad或sqldbx逐个编译每个包,有没有办法可以用sqlplus命令编写一个批处理文件,这样我就可以一次运行我的所有包..就像*.sql

oracle plsql compilation package

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

PL/SQL rownum更新

我正在使用几个表来处理数据库.他们是一个

      districts table
      PK district_id

      student_data table
      PK study_id
      FK district_id

      ga_data table
      PK study_id
      district_id
Run Code Online (Sandbox Code Playgroud)

ga_data表是我正在添加的数据.school_data表和ga_data都有130万条记录.两个表之间的study_id是1比1,但是ga_data.district_id是NULL并且需要更新.我在使用以下PL/SQL时遇到问题:

update ga_data
set district_id = (select district_id from student_data
where student_data.study_id = ga_data.study_id)
where ga_data.district_id is null and rownum < 100;
Run Code Online (Sandbox Code Playgroud)

我需要逐步增加,这就是为什么我需要rownum.但我正确使用它吗?在多次运行查询之后,它只更新了大约8,000条记录中的130万条记录(应该是大约110万条更新,因为在student_data中某些district_id为null).谢谢!

mysql oracle plsql

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

PLSQL中的异常处理

我需要你的帮助来处理我的包中的异常.我不知道在哪里编写异常.我包括这个功能.问题是ACTY_COUNT属于varchar类型.因此,如果用户在不知不觉中输入一些字母表,整个包将无法工作,因为我们是该字段的总和.我需要为此编写一个例外,这样如果为该字段输入了任何字母值,那么当其他人的报告显示时,它就会处理该员工的错误.提前致谢

FUNCTION ACTY_Ld_DAT(V_STARTDATE IN DATE,V_ENDDATE IN DATE) RETURN SYS_REFCURSOR IS
  ACTY_DATA SYS_REFCURSOR;

  BEGIN
      OPEN ACTY_DATA FOR
  /*Query to fetch the report field into ref cursor*/
      SELECT
     MAIN_DATA.EMPID AS "EMP_ID",
     MAIN_DATA.FIRST_NAME AS "FIRST_NAME",
     MAIN_DATA.LAST_NAME AS "LAST_NAME",
     MAIN_DATA.LOCATION AS "LOCATION",
     MAIN_DATA.ACTY_NAME AS "ACTY_NAME",
     SUM(NVL(MAIN_DATA.ACTY_COUNT,0)) AS "ACTY_COUNT",
     SUM(MAIN_DATA.REGULAR_HRS) AS "REG_HRS",
     SUM(MAIN_DATA.OVERTIME_HRS) AS "OT_HRS",
     SUM(MAIN_DATA.TOTAL_HRS) AS "TOTAL_HRS",
     (
        CASE
           WHEN MAIN_DATA.ACTY_NAME = 'X' AND SUM(ACTY_COUNT) != 0  THEN
              (100/SUM(MAIN_DATA.TOTAL_HRS)) * ROUND((1.33 * SUM(ACTY_COUNT)),1)
           WHEN (MAIN_DATA.ACTY_NAME = 'Y' OR MAIN_DATA.ACTY_NAME = 'Z' OR MAIN_DATA.ACTY_NAME = …
Run Code Online (Sandbox Code Playgroud)

plsql

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

将varchar字段中的Oracle时间增加一定量?

我们有时间存储在Oracle varchar(5)字段中.

使用HH24存储的时间:MI(即:22:30,10:15).

我们如何运行一个查询,将这些时间增加或减少一定数量?即:增加一小时或减少45分钟.

sql oracle time plsql

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

PL SQL无法从文件中读取

我是PL/SQL的新手,我试图通过PL/SQL从文件中读取,如下所示.我一直得到"ORA-20000".我在做什么不对劲?

declare

  output_file  utl_file.file_type;
  firstline    VARCHAR2(1000);
  secondline   VARCHAR2(1000);

BEGIN
  output_file := utl_file.fopen (&1,&2, 'W');
  utl_file.fclose(output_file);
EXCEPTION
  WHEN utl_file.invalid_path THEN
  RAISE_APPLICATION_ERROR(-20000, 'ERROR: INVALID PATH FOR FILE.');
END;
/
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql

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