我希望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.
更好的解决方案?
我继承了一些代码,这些代码将成为一些额外工作的基础.看看存储过程,我看到了很多关联数组.
其中一些由binary_integers索引,一些由pls_integers索引.这两者有什么不同吗?
我查看了文档,但除此之外:
PL/SQL数据类型
PLS_INTEGER和BINARY_INTEGER相同.为简单起见,本文档使用PLS_INTEGER来表示PLS_INTEGER和BINARY_INTEGER.
我发现两者之间没有任何区别.那有什么区别?是否出于历史/兼容性原因?
我正在使用Oracle 10gR2
我想在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中执行此操作.
你好,不知道为什么我得到这个错误.基本上我在这三行中得到它:
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) 首先,这不是这个问题的重复.如果是,抱歉,但我无法通过阅读来解决我的问题.
我收到这个错误:
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数据类型.如您所见,它与同一个表的列相同.这个陈述属于一个更大的陈述,我已经隔离了我遇到这个问题的部分.
非常感谢你.
我遇到的问题是当我在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中删除数据?
任何人都可以帮助我了解何时使用:NEW和:OLD在PLSQL块中,我发现很难理解它们的用法.
我不太明白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)
我假设创建和免费调用之间的操作使其相关,但我只是不清楚如何.
我有一个存储过程如下.
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值替换为默认值,该怎么办?