代码之家  ›  专栏  ›  技术社区  ›  evam

SQL-忽略重复表名

  •  0
  • evam  · 技术社区  · 4 年前

    有没有一种方法可以做到这一点,而不必重复两个表的名称(谁共享一个名称?)

    CREATE TABLE student(
        student_id INT PRIMARY KEY,
        last_name VARCHAR(30),
        major VARCHAR(30))
    

    现在我想要一个精确的表格,但我想让它在测试中。大学生

    CREATE TABLE test.student AS 
    SELECT * 
    FROM public.student;
    

    但我想写这篇文章,而不必重复写“学生”。

    1 回复  |  直到 4 年前
        1
  •  2
  •   Erwin Brandstetter    4 年前

    你可以创建一个 procedure (或函数)使用动态SQL:

    CREATE OR REPLACE PROCEDURE foo(_schema text, _table text)
        LANGUAGE plpgsql AS
    $func$
    BEGIN
       EXECUTE format('CREATE TABLE %1$I.%2$I AS TABLE public.%2$I'
                    , _schema, _table);
    END
    $func$;
    

    CALL foo('test', 'student');
    

    注意,这里的标识符区分大小写!

    小心可能的SQL注入。 format() 使用格式说明符 %I (用于 标识符 $1 , $2

    见: