我想写一个函数,将两个表的记录(笛卡尔积)插到第三个大表里:下面这个报错了,有高手帮忙我一下吗,谢谢啊。。
postgresql:CREATE OR REPLACE FUNCTION my_xxxx() RETURNS INTEGER AS $$
DECLARE
  next_rental  CURSOR FOR SELECT * FROM t1_ids;
  rental       t1_ids%ROWTYPE;
  next_rental_for_t2_ids  CURSOR FOR SELECT * FROM t2_ids;
  rental_for_t2_ids       t2_ids%ROWTYPE;
  i         INTEGER := 0;
  j         INTEGER := 0;
BEGIN
    OPEN next_rental;
LOOP 
FETCH next_rental INTO rental;
EXIT WHEN NOT FOUND;
       
OPEN rental_for_t2_ids;
--  上面这句执行的时候报了个错,报的错是这样的:
--       ERROR:  expected a cursor or refcursor variable at or near "rental_for_t2_ids"
--       LINE :   OPEN rental_for_t2_ids;

LOOP 
FETCH next_rental_for_t2_ids INTO rental_for_t2_ids;
EXIT WHEN NOT FOUND; --PERFORM process_rental( rental );
insert  into tbl_t1_t2( t1_id,t2_id ) values(rental.t1_id,next_rental_for_t2_ids.t2_id);
RAISE NOTICE 'i=%,j=%: t1_id = % t2_id = %  ', i,j,rental.t1_id,next_rental_for_t2_ids.t2_id; j := j + 1;

END LOOP;

i := i + 1;
END LOOP;
   CLOSE rental_for_t2_ids;
   CLOSE next_rental;
return 1;
END;
$$ LANGUAGE 'plpgsql';--------------------------
下面把我测试的代码贴一下-- Table: tbl_t1_t2DROP TABLE tbl_t1_t2;CREATE TABLE tbl_t1_t2
(
  t1_id character varying(40) NOT NULL,
  t2_id integer NOT NULL,
  CONSTRAINT tbl_t1_t2_pkey PRIMARY KEY (t1_id, t2_id)
);
DROP TABLE t1_ids;CREATE TABLE t1_ids
(
  t1_id character varying(40) PRIMARY KEY
);insert into t1_ids values('A');
insert into t1_ids values('B');-- Table: t2_idsDROP TABLE t2_ids;CREATE TABLE t2_ids
(
  t2_id integer  PRIMARY KEY
);
insert into t2_ids values(100);
insert into t2_ids values(101);
insert into t2_ids values(102);--TRUNCATE TABLE tbl_t1_t2;CREATE OR REPLACE FUNCTION my_xxxx() RETURNS INTEGER AS $$
DECLARE
  next_rental  CURSOR FOR SELECT * FROM t1_ids;
  rental       t1_ids%ROWTYPE;
  next_rental_for_t2_ids  CURSOR FOR SELECT * FROM t2_ids;
  rental_for_t2_ids       t2_ids%ROWTYPE;
  i         INTEGER := 0;
  j         INTEGER := 0;
BEGIN
    OPEN next_rental;
LOOP 
FETCH next_rental INTO rental;
EXIT WHEN NOT FOUND;
       
OPEN rental_for_t2_ids;
--  上面这句执行的时候报了个错,报的错是这样的:
--       ERROR:  expected a cursor or refcursor variable at or near "rental_for_t2_ids"
--       LINE :   OPEN rental_for_t2_ids;

LOOP 
FETCH next_rental_for_t2_ids INTO rental_for_t2_ids;
EXIT WHEN NOT FOUND; --PERFORM process_rental( rental );
insert  into tbl_t1_t2( t1_id,t2_id ) values(rental.t1_id,next_rental_for_t2_ids.t2_id);
RAISE NOTICE 'i=%,j=%: t1_id = % t2_id = %  ', i,j,rental.t1_id,next_rental_for_t2_ids.t2_id; j := j + 1;

END LOOP;

i := i + 1;
END LOOP;
   CLOSE rental_for_t2_ids;
   CLOSE next_rental;
return 1;
END;
$$ LANGUAGE 'plpgsql';select * from my_xxxx();