给定一个表名和一个列名,我试图动态删除一个我事先不知道名称的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从未支持解析定界查询。每次调用都是一次数据库访问。也许您
我正在尝试在pyspark中运行子查询。我发现可以使用SQL语句。但是,使用“where”或“filter”操作是否有任何内在的支持? 考虑测试数据框架: 在这里,您可以看到where函数工作正常。当我尝试使用子查询执行相同操作时,如下所示: 我得到这个错误: 属性错误回溯(最近一次调用)在---- /opt/cloudera/parcels/CDH-6.3.4-1。cdh6.3.4。p4744.
问题内容: 我有以下SQL表 部 雇员 我想写一条返回的声明 我有 当然,这缺少“男性雇员的数量”。由于不确定,我被困在这里,在哪里指定附加子句e.gender = male。 我忘了提:HQL或标准会很好。 问题答案: 假设原始查询和架构正确: