有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (1) 个答案

  1. # 1 楼答案

    您可以创建一个表,或者删除一个表,就像执行DML语句一样。。。SQL语句作为字符串传递给数据库引擎

    我怀疑您要问的是,是否可以在SQL语句中提供一个标识符(例如一个表名),方法是在执行准备好的语句时将其作为绑定占位符的。e、 g

     CREATE TABLE ? (mycol INT) 
    

    或者

     CREATE TABLE :my_table_name (mycol INT)  
    

    简而言之,这是不可能做到的

    语句中的标识符(例如表名)必须与SQL文本中的一样出现。就像关键字SELECTFROM必须出现在SQL文本中一样,不能通过绑定占位符作为值提供

    我们可以在SELECT语句中演示该限制,尝试将表或视图的名称作为绑定占位符提供。不管是位置?还是命名占位符

    这不管用:

    SELECT t.col c FROM ? t LIMIT 1
    

    这不管用:

    SELECT 2 AS :col_alias FROM :v_table_name LIMIT 1  
    

    如果您了解SQL优化器在准备和执行语句时执行的操作,那么关于标识符的限制是有意义的

    此限制适用于SELECT语句。以及DML语句(插入、更新、删除)和DDL语句(创建、更改、删除)


    执行DDL语句的另一个潜在问题将导致隐式提交。我们需要注意这一点,以便在交易环境中正确处理这一点


    如果需要执行动态DDL语句,为标识符提供变量,有两种基本方法:

    1)将SQL文本动态构造为字符串,以便表名(和其他标识符)是SQL文本的一部分,而不是绑定占位符

    2)创建一个将执行该语句的存储过程,并调用该存储过程。存储过程的参数可以作为绑定占位符传递