标签: plsql

在PLSQL中转义单引号

我希望PLSQL生成如下字符串:

COMMENT ON COLUMN TABLE.COLUMN IS 'comment from database';
Run Code Online (Sandbox Code Playgroud)

我的解决方案是:

declare
  str_comment varchar2(4000);
begin
  for rec in (select table_name, column_name, description from description_table)
  loop
    str_comment:='COMMENT ON COLUMN '||rec.table_name||'.'||rec.column_name||'  IS '''||rec.description||'''; ' ;
    dbms_output.put_line(str_comment);
  end loop;
end;
Run Code Online (Sandbox Code Playgroud)

如果输入不包含单个qoutes,则输出正常rec.description.否则需要转义信.我该如何实施呢?

OK输出行(它有转义字以保留单个qoute):

COMMENT ON COLUMN TABLE1.COLUMN1_LV  IS 'It''s secret';
Run Code Online (Sandbox Code Playgroud)

NOT NOK输出行,因为没有添加单引号的转义字母且不编译:

COMMENT ON COLUMN TABLE1.COLUMN1_LV  IS 'It's secret';
Run Code Online (Sandbox Code Playgroud)

我的解决方案是不检查描述是否包含单引号.我只是在生成COMMENT ON字符串然后我之前用两个单引号替换source(description)列的单引号ROLLBACK.

更好的解决方案?

oracle plsql

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

pls_integer和binary_integer有什么区别?

我继承了一些代码,这些代码将成为一些额外工作的基础.看看存储过程,我看到了很多关联数组.

其中一些由binary_integers索引,一些由pls_integers索引.这两者有什么不同吗?

我查看了文档,但除此之外:

PL/SQL数据类型PLS_INTEGERBINARY_INTEGER相同.为简单起见,本文档使用PLS_INTEGER来表示PLS_INTEGERBINARY_INTEGER.

我发现两者之间没有任何区别.那有什么区别?是否出于历史/兼容性原因?

我正在使用Oracle 10gR2

oracle plsql associative-array oracle10g

27
推荐指数
3
解决办法
7万
查看次数

如何在Oracle中声明和显示变量

我想在Oracle中声明并显示一个变量.

在T-SQL中我会做这样的事情

DECLARE @A VARCHAR(10) --Declares @A
SELECT @A = '12' --Assigns @A
SELECT @A --Displays @A
Run Code Online (Sandbox Code Playgroud)

我怎样才能在Oracle中执行此操作.

oracle plsql oracle11g

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

Oracle PLS-00363:表达式''不能用作赋值目标

你好,不知道为什么我得到这个错误.基本上我在这三行中得到它:

PLS-00363: expression 'p_temp_foo.editable.modified_by' cannot be used as an assignment target
PLS-00363: expression 'p_temp_foo.editable.date' cannot be used as an assignment target
PLS-00363: expression 'p_temp_foo.editable.modified_by' cannot be used as an assignment target
Run Code Online (Sandbox Code Playgroud)

程序:

 PROCEDURE run_temp_procedure (p_temp_foo IN part_bean, p_member_number IN NUMBER)
 IS
 t_temp_foo part_bean;
  now   DATE;
  BEGIN
  now := SYSDATE;

             p_temp_foo.editable:= t_temp_foo.editable;
        p_temp_foo.editable.date := SYSDATE;
        p_temp_foo.editable.modified_by := p_member_number;


  END run_temp_procedure ;
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql

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

使用带有union和CLOB字段的select时出错ORA-00932

首先,这不是这个问题的重复.如果是,抱歉,但我无法通过阅读来解决我的问题.

我收到这个错误:

ORA-00932: inconsistent datatypes: expected - got CLOB
Run Code Online (Sandbox Code Playgroud)

当我尝试执行此SELECT语句时:

SELECT TXT.t_txt 
  FROM CITADM.tb_avu_txt_grc GR  
 INNER JOIN CITADM.tb_avu_txt TXT   
    ON (GR.e_txt = TXT.e_txt and GR.u_txt = TXT.u_txt)  
 WHERE  TXT.u_lin_ord = 1
UNION
SELECT TXT.t_txt 
  FROM CITADM.tb_avu_txt_grc_cvd GRC  
 INNER JOIN CITADM.tb_avu_txt TXT  
    ON (GRC.e_txt = TXT.e_txt and GRC.u_txt = TXT.u_txt)  
 WHERE  TXT.u_lin_ord = 2
Run Code Online (Sandbox Code Playgroud)

所选字段(t_txt)是CLOB数据类型.如您所见,它与同一个表的列相同.这个陈述属于一个更大的陈述,我已经隔离了我遇到这个问题的部分.

非常感谢你.

database oracle plsql

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

在Oracle中截断表获取错误

我遇到的问题是当我在Oracle中运行以下命令时,我遇到了错误.

Truncate table mytable;
Run Code Online (Sandbox Code Playgroud)

错误:

ORA-02266: unique/primary keys in table referenced by enabled foreign keys
Run Code Online (Sandbox Code Playgroud)

我发现,这个mytable与其他表有关系.这就是为什么Truncate命令不能继续进行的原因.如何使用Truncate命令使用SQL脚本从myTable中删除数据?

sql oracle plsql

26
推荐指数
4
解决办法
5万
查看次数

PLSQL:NEW和:OLD

任何人都可以帮助我了解何时使用:NEW:OLD在PLSQL块中,我发现很难理解它们的用法.

oracle triggers plsql

26
推荐指数
4
解决办法
7万
查看次数

dbms_lob.createtemporary()有什么意义?

我不太明白dbms_lob.createtemporary()函数.怎么:

DECLARE
    myclob CLOB;
BEGIN
    myclob := 'foo';
END;
Run Code Online (Sandbox Code Playgroud)

任何不同于:

DECLARE
    myclob CLOB;
BEGIN
    dbms_lob.createtemporary( myclob, TRUE );
    myclob := 'foo';
    dbms_lob.freetemporary( myclob );
END;
Run Code Online (Sandbox Code Playgroud)

我假设创建和免费调用之间的操作使其相关,但我只是不清楚如何.

oracle plsql lob

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

Oracle中存储过程的缺省值

我有一个存储过程如下.

 CREATE OR REPLACE PROCEDURE TEST(
       X IN VARCHAR2 DEFAULT 'P',
       Y IN NUMBER DEFAULT 1) AS
 BEGIN
 DBMS_OUTPUT.PUT_LINE('X'|| X||'--'||'Y'||Y);
 END;
Run Code Online (Sandbox Code Playgroud)

当我执行上述程序时

 EXEC TEST(NULL,NULL);
Run Code Online (Sandbox Code Playgroud)

它将打印X - Y. 当输入参数为null时,输入参数不会默认为过程签名中的指定值

.那么默认值有什么用?如果我们将null值作为输入传递并且我们想要将null值替换为默认值,该怎么办?

parameters plsql stored-procedures default oracle11g

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

Oracle中显式和隐式游标之间有什么区别?

我在PL/SQL中的光标术语上有点生疏.谁知道这个?

oracle plsql

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