postgresql procedure 存儲過程

 

 

QUOTE_IDENT 函數以雙引號字符串的形式返回指定字符串,以便此字符串可用作 SQL 語句中的標識符。

在 sql 語句中,大寫,全部會變成小寫,如果想保留大寫,需要加 雙引號

基礎表

 

create table student
(
    id   integer not null primary key ,
    name varchar(255),
    sex  varchar
);

select * from student;

create table teacher as select * from student;

---------------11111111111111111
CREATE extension "uuid-ossp";
SELECT    uuid_generate_v4 ( );

--立即執行存儲過程
DO $$
DECLARE
    v_idx INTEGER := 1;
BEGIN
        while
        v_idx < 300000
        loop
        v_idx = v_idx + 1;
    INSERT INTO "public"."student" ( "id", "name" )
    VALUES
        ( uuid_generate_v4 ( ), 'bobo' );

END loop;
END $$;

---------------22222222222222222


create or replace function count_student1()
returns integer as $$

declare
 pgSqlScript text;
 counts integer;

begin
pgSqlScript:='select count("name") from "student"';
execute pgSqlScript into counts;
return counts;
end;

$$ language plpgsql;


select count_student1();



---------------333333333333333
create or replace function count_student2(tableName text, columnName text)
returns text as $$

declare
 pgSqlScript text;
 counts integer;
begin
pgSqlScript:='select count('    || quote_ident(columnName)    || ') from '    || quote_ident(tableName);

return pgSqlScript;

end;

$$ language plpgsql;

select count_student2('student','name');




---------------4444444444444444
drop function count_student3;
create or replace function count_student3(tableName text, columnName text)
returns integer as $$

declare
 pgSqlScript text;
 counts integer;
begin
pgSqlScript:='select count('    || quote_ident(columnName)    || ') from '    || quote_ident(tableName);
execute pgSqlScript into counts;

if counts > 100 then
    return counts;
else
    return 0;
end if;

end;

$$ language plpgsql;

select count_student3('student','name');





---------------555555555555555
create or replace function count_student5()
returns integer as $$

declare
 pgSqlScript text;
 myid integer;
 myname varchar;

begin
pgSqlScript:='select id,name from student order by "id" asc ';
execute pgSqlScript into myid,myname;-- 可以同時賦多個值,但只會塞入最後一行數據

raise notice 'result is %' , myname; --打印語句
return myid;
end;

$$ language plpgsql;


select count_student5();


select id,name from student order by id;

delete from teacher;
select * from teacher;
select * from student;
insert into teacher select * from student;

update teacher T1 set name = T2.name from student T2 where T1.id = T2.id;

 

 

 

 

 

 

 

總結一下:

定義變量是在begin前

變量賦值時使用 :=

select 中賦值使用into

 

1、存儲過程(FUNCITON)變量可以直接用  || 拼接。上面沒有列出,下面給個栗子:

   

複製代碼
create or replace function f_getNewID(myTableName text,myFeildName text) returns integer as $$
declare
    mysql text;
        myID integer;
begin
    mysql:='select max('|| $2 || ' ) from '||$1;
        execute mysql into myID using myFeildName,myTableName; 
    if myID is null or myID=0 then return 1;
    else return myID+1;
      end if;
end;
$$ language plpgsql;
複製代碼

2、存儲過程的對象不可以直接用變量,要用 quote_ident(objVar)

3、$1  $2是 FUNCTION 參數的順序,如1中的 $1 $2交換,USING 後面的不換 結果 :select max(myTableName) from myFeildname

4、注意:SQL語句中的大寫全部會變成小寫,要想大寫存大,必須要用雙引號。

 

 

 

Postgresql 存儲過程(plpgsql)兩層for循環的操作==>https://www.jb51.net/article/204229.htm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章