我想运行一个过程来强制行上的行锁,但我不想将结果集返回给客户端,我也不想更新任何东西.以下是过程:
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
有没有办法比较日期值来检查一个是否在另一个之前?例如,我如何知道哪个在以下行中排在第一位
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.
当我尝试创建这样的存储过程时:
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
我怎样才能解决这个问题?
我的机器本地安装了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) 当我从开发转向生产或发布变更请求时,我有很多需要编译的软件包.
现在,我们使用toad或sqldbx逐个编译每个包,有没有办法可以用sqlplus命令编写一个批处理文件,这样我就可以一次运行我的所有包..就像*.sql
我正在使用几个表来处理数据库.他们是一个
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).谢谢!
我需要你的帮助来处理我的包中的异常.我不知道在哪里编写异常.我包括这个功能.问题是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) 我们有时间存储在Oracle varchar(5)字段中.
使用HH24存储的时间:MI(即:22:30,10:15).
我们如何运行一个查询,将这些时间增加或减少一定数量?即:增加一小时或减少45分钟.
我是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)