Questions tagged «plsql»

PL / SQL(过程语言/结构化查询语言)是Oracle公司针对SQL的过程语言扩展。有关PL / SQL的问题也应标记为“ oracle”。带有常规DML或DDL语句的问题应标记为“ sql”和“ oracle”,而不是“ plsql”。

7
当我不知道约束名称时,如何在Oracle中删除“ not null”约束?
我有一个对字段具有NOT NULL约束的数据库,我想删除此约束。复杂的因素是,此约束具有系统定义的名称,并且该约束的名称在生产服务器,集成服务器和各种开发人员数据库之间不同。我们当前的过程是检入变更脚本,并且一个自动化的任务通过sqlplus针对目标数据库执行适当的查询,因此我希望可以直接发送到sqlplus的解决方案。 在我自己的数据库上,删除它的SQL将是: alter table MYTABLE drop constraint SYS_C0044566 查询all_constraints视图时可以看到约束: select * from all_constraints where table_name = 'MYTABLE' 但是我不确定如何使用SEARCH_CONDITION的LONG数据类型,或者即使知道了它的名称,也不确定如何最好地动态删除查找到的约束。 因此,如何创建一个更改脚本,可以根据其名称而不是其名称删除该约束? 编辑:@Allan的答案是一个很好的答案,但我担心(由于我缺乏Oracle专业知识),可能具有系统生成名称的任何约束都可能与它相关联,这并不是一种普遍的删除方法。约束而不必知道其名称。确实存在,在逻辑上删除该约束时,总会有一种避免必须知道系统命名约束名称的方法的方法吗?

5
Oracle PL / SQL-使用自定义SQLERRM引发用户定义的异常
是否可以创建用户定义的异常并能够更改SQLERRM? 例如: DECLARE ex_custom EXCEPTION; BEGIN RAISE ex_custom; EXCEPTION WHEN ex_custom THEN DBMS_OUTPUT.PUT_LINE(SQLERRM); END; / 输出为“用户定义的异常”。是否可以更改该消息? 编辑:这是一些更多的细节。 我希望这可以说明我正在尝试做的更好的事情。 DECLARE l_table_status VARCHAR2(8); l_index_status VARCHAR2(8); l_table_name VARCHAR2(30) := 'TEST'; l_index_name VARCHAR2(30) := 'IDX_TEST'; ex_no_metadata EXCEPTION; BEGIN BEGIN SELECT STATUS INTO l_table_status FROM USER_TABLES WHERE TABLE_NAME = l_table_name; EXCEPTION WHEN NO_DATA_FOUND THEN -- …

8
当结果可能为空时,如何在PL / SQL中选择一个变量?
考虑到查询可能不返回任何内容,有没有办法只运行一次查询以选择一个变量,那么在这种情况下变量应为null。 当前,我不能select into直接做一个变量,因为如果查询什么都不返回,PL / SQL会抱怨变量没有被设置。我只能运行两次查询,第一个查询执行计数,如果计数为零,则将变量设置为null,如果计数为1,则选择进入变量。 因此,代码如下所示: v_column my_table.column%TYPE; v_counter number; select count(column) into v_counter from my_table where ...; if (v_counter = 0) then v_column := null; elsif (v_counter = 1) then select column into v_column from my_table where ...; end if; 谢谢。 更新:我没有使用异常的原因是,在分配之后v_column,我仍然具有一些以下逻辑,并且我必须goto在异常部分中使用以跳回到以下代码。我有点犹豫goto。
75 select  plsql 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.