标签: plsql

如何激活日期的触发器

当系统到达特定日期时,我怎么能有一个更新某个字段的触发器?

即

+---------------------+  +-------------+
|   Trains            |  |    Trips    |
+---------------------+  +-------------+
| id                  |  |  id         |
| distanceTraveled    |  |  endDate    |
|                     |  |  trainUsed  |
|                     |  |  distance   |
+---------------------+  +-------------+
Run Code Online (Sandbox Code Playgroud)

火车:

  • train1,0
  • train2,0
  • train3,0
  • train4,0

旅行:

  • 1,明天12:00:00,火车1,10
  • 明天2点14:45:00,火车3,20
  • 3,02:15:00后,tomorow,train1,15

执行:

  • 明天中午12点00分,更新火车列车,以便train1的distanceTraveled字段为10
  • 明天14:45:00,更新表火车,使train3的distanceTraveled字段达到20
  • 在明天后的02:15:00,更新表格列车,以便train1的distanceTraveled字段达到25

2天的最终结果将是

火车:

  • train1,25
  • train2,0
  • train3,20
  • train4,0

oracle triggers plsql oracle10g dbms-scheduler

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

在PL SQL中删除Statement

可以在PL SQL中执行Drop.

这个SQL有什么问题

我试图放弃所有用户.问题出在drop user username cascase语句中

connect sys/abcsds@1.1.1.1 as sysdba
exec dbms_output.enable(1000000);
set serveroutput on
DECLARE
BEGIN
for rec in (select username from dba_users where username LIKE 'S%' AND username NOT LIKE 'SY%') loop
dbms_output.put_line(to_char(rec.username));
dbms_sql.execute('drop user rec.username cascade');
end loop;
END;
.
run;
exit;
Run Code Online (Sandbox Code Playgroud)

oracle ddl plsql stored-procedures

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

在PL/SQL脚本上使用DB链接会引发"找不到表"错误

虽然试图创建一个使用PL/SQL我发现自己坚持了以下问题的报告,我创建了访问使用DB连接远程DB 2代表的SQL查询,单独运行查询本身返回预期的结果,但是当我运行相同的查询并将结果放入我得到的游标中

PL/SQL: ORA-00942: table or view does not exist
Run Code Online (Sandbox Code Playgroud)

错误.

我不确定它是否与我为每个表使用的别名有关,或者select语句可能试图选择本地表,我不知道,你有什么建议吗?

PL/SQL:

DECLARE
   CURSOR t_bug_details IS (SELECT h.*
  FROM table1@REMOTEDB h,
       table2@REMOTEDB rml
  WHERE h.product_id   IN (123)
  AND h.category       IN ('category')
  AND h.status          < 4
  AND h.status NOT     IN (1,2,3)
  AND h.release_status IN (upper('P'))
  --AND h.programmer     IN (upper('MRFOO'))
  AND h.some_id      = rml.some_id
  and rownum <=400);

REPORT_DAY VARCHAR2(40);
mail_html clob;
mail_bod clob;

BEGIN

FOR v_some_details in t_bug_details
LOOP
REPORT_DAY := TO_CHAR(SYSDATE,'DD-MON-YYYY HH24:MI:SS');
DBMS_OUTPUT.PUT_LINE(REPORT_DAY || '|' ||
                     v_some_details.reptnom || '|' || …
Run Code Online (Sandbox Code Playgroud)

oracle plsql ora-00942 oracle-apex

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

如何找出oracle数字的位数

我在oracle中有一个表,如下所示:

name              |     type    | nullable  
------------------------------------------
person_name       | varchar(20) | yes  
weight_coeficient | number      | yes
...
Run Code Online (Sandbox Code Playgroud)

我如何计算weight_coeficient的值有多少位数?例如:

3.0123456789有11位数(精度 = 11)和小数点后10位数(刻度 = 10)

是否有任何sql命令/函数可以做到这一点,类似的东西GetPrecision( select.. )返回11?

另请注意,表的定义未指定比例和精度.据我所知,所有数字都应用了最大精度.所以我不想找出定义的精度(= 48),而是表中特定值的精度.这可能只是使用oracle命令吗?

谢谢你,
JP

oracle precision plsql

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

重构PL/SQL

我在工作中遇到了以下PL/SQL代码(变量已修改):

PROCEDURE test(i_w IN a.w%type,o_result IN OUT resu_cur_type) IS
BEGIN
    IF i_w IS NULL THEN
      open o_result for SELECT a.x, b.y FROM a,b WHERE a.z=b.z;
    ELSE
      open o_result for SELECT a.x, b.y FROM a,b WHERE a.z=b.z AND a.w=i_w;
    END IF;
END test;
Run Code Online (Sandbox Code Playgroud)

我认为上述内容相当于以下内容:

PROCEDURE test(i_w IN a.w%type,o_result IN OUT resu_cur_type) IS
BEGIN
      open o_result for SELECT a.x, b.y FROM a,b WHERE a.z=b.z AND NVL(a.w,1)=NVL(NVL(i_w,a.w),1);
END test;
Run Code Online (Sandbox Code Playgroud)

不一样吗?有人可以解释是否有任何理由使用原始版本?请注意,原始游标是一个50行查询,因此重构可能会提高其可读性并保持简单.

编辑:

为了解决Kevin Burton的答案中的问题,我更新了WHERE条件.

oracle refactoring plsql

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

在Oracle中生成随机数

在我的一个项目中,我必须生成一个从1到2000的随机数并将它们存储到表中.我必须在表中存储2000个值.我必须在表中存储不同的值.锄头在oracle中这样做.我正在使用Oracle 11g.

oracle random plsql oracle11g

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

使用PL/SQL关联数组

create or replace aArr is TABLE of varchar2 index by binary_integer;
create or replace bArr is TABLE of varchar2 index by binary_integer;

create or replace prc(oname aArr, iname bArr) as
begin

--Now i have two arrays
-- i want to insert or update into table using these two arrays
-- How can i do that with out using the loops.
-- is there any bulk insert or update.

end
Run Code Online (Sandbox Code Playgroud)

现在我有两个数组.我想使用这两个数组插入或更新到表中.如何在不使用循环的情况下做到这一点?是否有批量插入或更新?

oracle plsql bulkinsert

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

pl/sql - 比较2个用户表中的记录计数

我在用户名'staff'的架构'staff'下有'stf_table'表.

我在'employee'架构下有'emp_table'表,用户名为'employee'.

这两个都在相同的数据库SID /主机/端口下,但用户'staff'没有查询架构'employee'下的表,反之亦然(即用户'employee'没有privelege查询表下架构'员工').但是每个用户都可以在自己的架构下查询表.注意:我无法授予额外的权限,我不想将两个表都转储到本地架构中.

是否可以编写一个PL/SQL proc或包来执行以下操作?

 select count(*) from stf_table;
 select count(*) from emp_table;
Run Code Online (Sandbox Code Playgroud)

然后将两个计数输出到一个文件(即.txt或.dat不关心),如下所示:

stf_table count: 47830
emp_table count: 36462
difference: 11368
counts match: FALSE
Run Code Online (Sandbox Code Playgroud)

sql database oracle plsql count

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

关于Oracle序列的问题

我们已经在数据库中有一个序列,现在我必须修改该序列,以便从一个特定的值开始,我将从db中获取.我写了以下代码

DECLARE
  i_Seq   INTEGER;
BEGIN
  SELECT MAX (col_id) + 1 INTO i_Seq from Table;

  EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQHDR MINVALUE '|i_Seq|' MAXVALUE 999999999999999999999999999 INCREMENT BY 1 START WITH '|i_Seq|' CACHE 20 NOORDER NOCYCLE'
END;
/
Run Code Online (Sandbox Code Playgroud)

我有以下问题.

  1. 我是否必须首先删除旧序列,否则oracle会自行完成它?
  2. 序列创建中的start with子句.我使用它吗?或者我可以用任何数字替换它?

oracle plsql sequence oracle11g

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

我见过一个但是...... 10g套餐究竟是什么?

场景:我对包不了解,除了它们包含的函数和程序都包含在一个漂亮的小礼物中.所以今天我得到了这个包(相当大)的说明"在这里,这是破碎的,请修理它".

我终于清理了一切,这让我想到了我的问题.

在包的整体视图中,将要导出.

1)除了所有东西的集合外,包装是否还有其他用途?

2)要部署此包,您是否需要将部署空间设置为已包含该包调用的所有视图/物化视图/表?如果不是,我假设包将无法执行.

3)您是否可以编写程序包以跳过无法执行而无法执行的函数和过程?

4)当把在一个地方成功编译的包裹带到另一个地方时,我应该注意哪些其他的东西?

sql oracle plsql package oracle10g

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