【发布时间】:2019-01-13 22:06:31
【问题描述】:
我是 Postgres 的新手。这是我的表job_defn的结构和一些示例数据:
CREATE TABLE job_defn (
job_id INTEGER NOT NULL,
job_name CHARACTER VARYING(255) NOT NULL,
system CHARACTER VARYING(50) NOT NULL,
frequency CHARACTER VARYING(10) NOT NULL,
run_day_id INTEGER NOT NULL,
run_day_of_month INTEGER NOT NULL,
eff_start_date DATE NOT NULL,
eff_end_date DATE NOT NULL
);
样本数据:
---------------------------
job_id frequency
---------------------------
1001 DAILY
1002 WEEKLY
---------------------------
在运行以下函数时,我期望l_freq 变量包含表中的frequency 列值。但是,即使表行包含一个值,它也总是打印 NULL:
CREATE OR REPLACE FUNCTION testing()
RETURNS void AS $$
DECLARE
l_job_id INTEGER;
l_job_defn_record job_defn%ROWTYPE;
l_freq CHARACTER VARYING(10);
BEGIN
FOR l_job_defn_record IN
SELECT job_id, frequency FROM job_defn ORDER BY job_id ASC
LOOP
l_job_id := l_job_defn_record.job_id;
l_freq := l_job_defn_record.frequency;
raise info'job id: %, frq: %', l_job_id, l_freq;
raise info'row==>%', l_job_defn_record;
END LOOP;
END;
$$ LANGUAGE plpgsql VOLATILE;
日志:
17:50:52 [CREATE - 0 row(s), 0.036 secs] Command processed. No rows were affected
Code: 0 SQL State: 00000 --- job id: 10001, frq: <NULL>
Code: 0 SQL State: 00000 --- row==>(10001,DAILY,,,,,,,,,,)
Code: 0 SQL State: 00000 --- job id: 10001, frq: <NULL>
Code: 0 SQL State: 00000 --- row==>(10001,DAILY,,,,,,,,,,)
Code: 0 SQL State: 00000 --- job id: 10001, frq: <NULL>
Code: 0 SQL State: 00000 --- row==>(10001,DAILY,,,,,,,,,,)
Code: 0 SQL State: 00000 --- job id: 10001, frq: <NULL>
Code: 0 SQL State: 00000 --- row==>(10001,DAILY,,,,,,,,,,)
Code: 0 SQL State: 00000 --- job id: 10001, frq: <NULL>
Code: 0 SQL State: 00000 --- row==>(10001,DAILY,,,,,,,,,,)
Code: 0 SQL State: 00000 --- job id: 10001, frq: <NULL>
Code: 0 SQL State: 00000 --- row==>(10001,DAILY,,,,,,,,,,)
Code: 0 SQL State: 00000 --- job id: 10001, frq: <NULL>
Code: 0 SQL State: 00000 --- row==>(10001,DAILY,,,,,,,,,,)
Code: 0 SQL State: 00000 --- job id: 10002, frq: <NULL>
Code: 0 SQL State: 00000 --- row==>(10002,WEEKLY,,,,,,,,,,)
... 1 statement(s) executed, 0 row(s) affected, exec/fetch time: 0.036/0.000 sec [0 successful, 1 warnings, 0 errors]
【问题讨论】:
-
功能好像没问题,问题可能出在列的类型上。编辑问题并添加表定义(psql 中的
\d job_defn) -
您好 klin,我已添加表定义。请提出建议。
标签: postgresql loops rows variable-assignment plpgsql