标签: plsql

oracle数据库的主键格式

我想对主键使用字母数字格式,即A1 A2 A3并使其自动递增.

我怎样才能做到这一点?它甚至可以推荐吗?

sql oracle plsql sequence

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

如何动态更改PL/SQL包中的全局变量的值?

在我们的Oracle数据库中的一个PL/SQL包中,有一个全局变量g_file_path,它指向系统上将存储某些文件的位置:

create or replace
PACKAGE xyz_package
AS

...

   g_file_path     VARCHAR2 (80) := '/usr/tmp';

...
Run Code Online (Sandbox Code Playgroud)

此变量用于整个包中的各种UTL_FILE操作.

不幸的是,选择的路径是不合适的,我需要弄清楚如何根据数据库运行的环境动态设置路径,例如路径变为/ opt/ENVDB/xyz,其中ENVDB根据env而变化.

一个想法是模拟shell脚本的行为:

>echo $XYZ_DB_TOP
Run Code Online (Sandbox Code Playgroud)

这指向可以存储文件的合适文件夹.我想不出一个合适的PL/SQL函数来模拟这种行为.这个问题的任何智能/简单解决方案?任何帮助表示赞赏!

oracle parameters plsql path

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

Oracle BLOB列读取

我有一个查询结果,其中定义了BLOB列.BLOB包含图像,我有兴趣在不使用任何类型的应用程序的情况下向其他人显示此结果.例如,查询返回三列: -


NAME => Steven
PHONE => 786
PICTURE => BLOB
有没有办法以任何导出格式检索/显示此BLOB,可能是Microsoft访问,Excel工作表,HTML或PDF.主题是获取此结果并显示此BLOB以及其他列,我可以选择仅使用PL/SQL和SQL.在这里我想补充说我正在使用HORA(保留工具)来导出我的查询结果.
我想要的是提取包含图像的查询.可能吗?

sql plsql blob plsqldeveloper oracle11gr2

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

如何以编程方式在PL/SQL中设置表名?

我创建了以下简单的PL/SQL存储过程示例来询问特定问题.此过程将员工姓名和ID号插入到名为的表中employees_???.??? 解释如下.

PROCEDURE hire_employee (emp_id IN INTEGER, name IN VARCHAR2, country IN VARCHAR2) 
AS
BEGIN
    INSERT INTO employees_??? VALUES (emp_id, name, 1000);
END hire_employee;
Run Code Online (Sandbox Code Playgroud)

我需要的是根据IN变量设置表名country.例如,

如果country ='usa',我希望INSERT行读取:

INSERT INTO employees_usa VALUES (emp_id, name, 1000);
Run Code Online (Sandbox Code Playgroud)

如果country ='germany',我希望INSERT行读取:

INSERT INTO employees_germany VALUES (emp_id, name, 1000);
Run Code Online (Sandbox Code Playgroud)

如果country ='france',我希望INSERT行读取:

INSERT INTO employees_france VALUES (emp_id, name, 1000);
Run Code Online (Sandbox Code Playgroud)

等等...

有没有办法在PL/SQL中通过替换代替一些东西来执行此操作,employee_???因此只使用一行INSERT代码?或者使用case或if/then/else声明最好的方式?

oracle plsql

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

防止在oracle数据库中两次插入相同的值

我有一个以这种形式的数字:2012-01(2012年作为当前年份),01只是我数据库中字段的最大值加1,每年该数字重置为0.

但如果有两个用户尝试同时执行相同的操作,则两者的值相同,因此我在数据库中插入两次相同的数字.

我想创建一个序列,但是这需要一个每年重置序列的作业,我宁愿在获得下一个数字之前有一种方法可以锁定并在插入完成后释放它?

谢谢.

php oracle plsql

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

在oracle的PL/SQL中,&和:有什么区别?

我正在研究PL/SQL并且我正在经历绑定变量.我理解我们用来传递RUN-TIME值的绑定变量.

但PL/SQL中&和:(冒号)有什么区别?两者是相同的还是两者之间有什么区别?我什么时候应该使用&和:?

sql plsql sqldatatypes

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

Oracle硬解析

我们有一个prepareStatement需要对db做多个操作,所以所有这些sql语句都包含在BEGIN-END块中

BEGIN
 DELETE FROM...WHERE A=?..
 UPDATE TABLE...WHERE B=?..
END;
Run Code Online (Sandbox Code Playgroud)

但许多评论家表示,这将导致一个难以解析的问题.从我的理解硬解析是在共享池中找不到sql,然后语法,执行计划..一切都需要再次计算,但这里不应该将Oracle视为单独的sql语句.我如何才能发现oracle会在给定的sql语句中进行硬解析?

database oracle plsql

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

比较两个日期字段时,"Literal与格式字符串不匹配"

我在这里有一种奇怪的行为,我希望有人可以向我解释.

我在查询中有两个字段.一个是通过拍摄转换为日期的数字字段to_date('01/01/1960', 'mm/dd/yyyy') + somethingorother.另一个是文本字段,其中包含至少一个非日期值,该值将转换为日期to_date(textField, 'mm/dd/rrrr').如果我运行查询,它运行正常.但是,如果我将查询括select * from ( ) where field1 > field2起来,则会出现"ORA-01861:文字与格式字符串不匹配"错误.如果我尝试排除拉回文本字段的子查询的where子句中的已知非日期值,则无效.

我知道没有代码几乎不可能搞清楚,但我想知道是否有人可以向我解释为什么没有过滤器它可以工作,但是当我添加它时会爆炸.谢谢.

oracle plsql

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

如何跟踪在SQL Developer中执行某些操作所需的时间

基本上我在一个程序中这样做:

DECLARE
 CURSOR r_cursor is SELECT * from imp_exp.results where code = 8223558 FOR  UPDATE OF c_timestamp;

 BEGIN

 FOR idx IN r_cursor LOOP
   --dbms_output.put_line(idx.sample_code);
   update imp_exp.results set c_timestamp = TO_DATE('10-MAY-99', 'DD-MON=YY')    
WHERE CURRENT OF r_cursor;

END LOOP;

END;
Run Code Online (Sandbox Code Playgroud)

如何显示这需要多长时间?谢谢!

oracle plsql procedure timing

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

插入查询中需要澄清

表结构:

title { name varchar(100) }
Run Code Online (Sandbox Code Playgroud)

如果我尝试插入以下查询

insert into wikititle values('Men's');
Run Code Online (Sandbox Code Playgroud)

我收到错误引用字符串未正确终止.

即使我使用set escape也是如此

insert into wikititle values('Men\'s');
Run Code Online (Sandbox Code Playgroud)

并插入我收到此错误.

我在oracle 11i sql plus中执行所有这些执行.

sql oracle plsql

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