如何使用dblink删除表

huangapple go评论96阅读模式
英文:

How to drop table with dblink

问题

  1. Oracle中,如何使用dbLink删除一个表,如果它存在?我正在尝试使用Oracle中的DBLink连接到远程数据库。我正在使用Oracle SQL Developer
  2. `DROP TABLE TableName@dbLinkName`。这给我一个未知命令的错误。
  3. begin declare
  4. v_mytableobject_id
  5. NUMBER(10);
  6. SELECT
  7. object_id INTO v_mytableobject_id FROM user_objects@dblink
  8. WHERE
  9. object_name = 'MYTABLE';
  10. IF v_mytableobject_id IS NOT NULL THEN
  11. dbms_utility.exec_ddl_statement@dblink ( 'drop table MYTABLE' );
  12. ELSE
  13. dbms_utility.exec_ddl_statement@dblink ( 'CREATE TABLE MYTABLE
  14. (ID NUMBER(5,0) GENERATED ALWAYS AS IDENTITY MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE NOKEEP NOSCALE ,
  15. CODE NVARCHAR2(15),
  16. DESCRIPTION NVARCHAR2(125)
  17. )'
  18. );
  19. dbms_utility.exec_ddl_statement@dblink ( 'CREATE UNIQUE INDEX MYTABLE_PK ON MYTABLE (ID)
  20. PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
  21. STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  22. PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  23. BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)'
  24. );
  25. END IF;
  26. end;
英文:

How to drop a table if it exist in oracle with dbLink?I am here trying to connect to remote database using DBLink in oracle.I am using oracle sql developer.

DROP TABLE TableName@dbLinkName. This gives me error Unknown Command.

  1. begin declare
  2. v_mytableobject_id
  3. NUMBER(10);
  4. SELECT
  5. object_id INTO v_mytableobject_id FROM user_objects@dblink
  6. WHERE
  7. object_name = 'MYTABLE';
  8. IF v_mytableobject_id IS NOT NULL THEN
  9. dbms_utility.exec_ddl_statement@dblink ( 'drop table MYTABLE' );
  10. ELSE
  11. dbms_utility.exec_ddl_statement@dblink ( 'CREATE TABLE MYTABLE
  12. (ID NUMBER(5,0) GENERATED ALWAYS AS IDENTITY MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE NOKEEP NOSCALE ,
  13. CODE NVARCHAR2(15),
  14. DESCRIPTION NVARCHAR2(125)
  15. )'
  16. );
  17. dbms_utility.exec_ddl_statement@dblink ( 'CREATE UNIQUE INDEX MYTABLE_PK ON MYTABLE (ID)
  18. PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
  19. STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  20. PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  21. BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)'
  22. );
  23. END IF;
  24. end;

答案1

得分: 1

你不能像那样直接删除表格:

  1. SQL> drop table test@dbl_mike;
  2. drop table test@dbl_mike
  3. *
  4. ERROR at line 1:
  5. ORA-02021: 不允许在远程数据库上执行DDL操作

不过有一个解决方法:

  1. SQL> begin
  2. 2 dbms_utility.exec_ddl_statement@dbl_mike('drop table test');
  3. 3 end;
  4. 4 /
  5. PL/SQL过程成功完成。
  6. SQL>
英文:

You can't drop table just like that:

  1. SQL> drop table test@dbl_mike;
  2. drop table test@dbl_mike
  3. *
  4. ERROR at line 1:
  5. ORA-02021: DDL operations are not allowed on a remote database

There's a workaround, though:

  1. SQL> begin
  2. 2 dbms_utility.exec_ddl_statement@dbl_mike('drop table test');
  3. 3 end;
  4. 4 /
  5. PL/SQL procedure successfully completed.
  6. SQL>

huangapple
  • 本文由 发表于 2023年6月12日 05:04:14
  • 转载请务必保留本文链接:https://go.coder-hub.com/76452513.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定