至于规范,它是PostgreSQL 9.2,数据库通过PgAdmin3,表格格式为shapefile。如果有任何必要的额外细节,我将编辑并提供。
我本质上想根据其他一些列中的字符串值是否为空来更新一列整数值中的整数值。我最终想移植我的存储函数以使用 jdbc 在 java 应用程序中执行,但我首先想在 pgadmin3 中测试我的函数。我对 postgresql 的经验很少,并且对语法有点模糊。
因此,到目前为止,我对需要和要输入的参数有一定的了解:name、argmode、argname、argtype、column_name 和 lang_name。
我知道,如果我不返回任何东西,我可以将 RETURNS void 包含为 $$ 或根本不包含 return 语句。我认为我不需要结果集,我只想替换列中的整数值。我不确定如何引用我需要的表才能传递我要处理的列。
这是我到目前为止拼凑的代码:
CREATE [OR REPLACE] FUNCTION handle_malformed([[VARIADIC][]
table_name.column_name, table_name.column_name, table_name.column_name, table_name.column_name, table_name.column_name, table_name.column_name, table_name.column_name, table_name.column_name])
BEGIN
LOOP
IF NAME_1 IS NULL THEN
IF LEVEL_DEPT != 0 THEN
UPDATE AdminBoundaries SET \"LEVEL_DEPT\" = 0;
ELSE IF NAME_2 IS NULL THEN
IF LEVEL_DEPT != 1 THEN
UPDATE AdminBoundaries SET \"LEVEL_DEPT\" = 1;
ELSE IF NAME_3 IS NULL THEN
IF LEVEL_DEPT != 2 THEN
UPDATE AdminBoundaries SET \"LEVEL_DEPT\" = 2;
ELSE IF NAME_4 IS NULL THEN
IF LEVEL_DEPT != 3 THEN
UPDATE AdminBoundaries SET \"LEVEL_DEPT\" = 3;
ELSE IF NAME_5 IS NULL THEN
IF LEVEL_DEPT != 4 THEN
UPDATE AdminBoundaries SET \"LEVEL_DEPT\" = 4;
ELSE
IF LEVEL_DEPT !=5 THEN
UPDATE AdminBoundaries SET \"LEVEL_DEPT\" = 5;
EXCEPTION
END LOOP;
END PROCEDURE;
$$ LANGUAGE plpgsql;
update handle_malformed(AdminBoundaries.NAME_5, AdminBoundaries.NAME_4, AdminBoundaries.NAME_3,
AdminBoundaries.NAME_2, AdminBoundaries.NAME_1, AdminBoundaries.NAME_0, AdminBoundaries.WIKI_URL, AdminBoundaries.LEVEL_DEPT)
我放入的逻辑是我放入循环和结束循环之间的逻辑是我想要完成的逻辑。
我的具体问题是,如何在 SQL 中使用参数中的列名?