给定一个表名和一个列名,我试图动态删除一个我事先不知道名称的Oracle约束。
我可以通过以下查询找到约束名称:
SELECT CONSTRAINT_NAME
FROM USER_CONS_COLUMNS
WHERE TABLE_NAME = 'MyTable' AND
COLUMN_NAME='MyColumn' AND POSITION IS NULL
我的第一个想法是使用子查询,但这不起作用,并导致ORA-02250错误:
ALTER TABLE MyTable
DROP CONSTRAINT (
SELECT CONSTRAINT_NAME
FROM USER_CONS_COLUMNS
WHERE TABLE_NAME = 'MyTable' AND
COLUMN_NAME='MyColumn' AND POSITION IS NULL)
到目前为止,我唯一可行的解决方案是以下解决方案,但感觉不必要的复杂:
DECLARE
statement VARCHAR2(2000);
constr_name VARCHAR2(30);
BEGIN
SELECT CONSTRAINT_NAME INTO constr_name
FROM USER_CONS_COLUMNS
WHERE table_name = 'MyTable' AND
column_name = 'MyColumn' AND position is null;
statement := 'ALTER TABLE MyTable DROP CONSTRAINT '|| constr_name;
EXECUTE IMMEDIATE(statement);
END;
/
是否有一种方法可以像我最初打算的那样使用子查询来做到这一点?如果不是,那么有人可以建议一种更简洁的方法吗?
你不能。SQL和DDL基本上是两种独立的语言。您的解决方案是正确的。
本文向大家介绍我们可以在MySQL查询中使用SELECT NULL语句吗?,包括了我们可以在MySQL查询中使用SELECT NULL语句吗?的使用技巧和注意事项,需要的朋友参考一下 是的,我们可以在MySQL查询中使用SELECT NULL语句。让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 以下是实现SELECT NULL
问题内容: 所以我试图解决这个问题,但似乎最后一行(检查)不允许在其中进行子查询。有什么办法可以使Oracle工作吗? 这是错误信息: 问题答案: 由于CHECK约束不能基于查询,因此有三种基本方法可以解决此类问题。 选项1:触发器 最简单的方法是在TANK上放置一个触发器,以查询TANKS并在LEVEL超过CAPACITY时引发异常。但是,这种简单化方法的问题在于,几乎不可能正确处理并发问题。如
问题内容: 我正在编写一个查询,其中我试图在子查询/ CTE中搜索通配符子字符串,并将此逻辑嵌套在我的CASE语句中。例如: 不幸的是,似乎没有办法做到这一点。由于我需要使用LIKE运算符,因此无法同时使用LIKE和IN。我将不得不分别编写每个LIKE语句,这将用于1000多个行。有人推荐更直接的解决方案吗?预先感谢! -编辑:对不起,每条评论有一些澄清。一个更好的例子: 在上表中,我需要在Use
问题内容: 我想在我的MySQL服务器上执行以下操作: 这在控制台上工作正常,但在我的Java PreparedStatement中却无法正常工作。它在’;’处引发带有语法错误的异常。分离语句。我喜欢该变量,因为我不必重复查找子句,但是如有必要,我可以重写它。与UNION子句相对应的JOIN也有点尴尬。 谢谢, 约书亚记 问题答案: JDBC从未支持解析定界查询。每次调用都是一次数据库访问。也许您
问题内容: 我有以下SQL表 部 雇员 我想写一条返回的声明 我有 当然,这缺少“男性雇员的数量”。由于不确定,我被困在这里,在哪里指定附加子句e.gender = male。 我忘了提:HQL或标准会很好。 问题答案: 假设原始查询和架构正确:
本节介绍子查询,子查询是嵌套在另一个语句(如:,,或语句)中的查询。 SQL Server中常用的子查询语句如下: 子查询 - 介绍子查询概念并向您展示如何使用各种子查询类型来查询数据。 相关子查询 - 介绍相关子查询概念以及如何使用。 EXISTS - 测试子查询返回的行的存在性。 ANY - 将值与子查询返回的单列值集进行比较,如果值与集合中的任何值匹配则并返回。 ALL - 将值与子查询返回