Re: Return cursor
От | alla@sergey.com (Alla) |
---|---|
Тема | Re: Return cursor |
Дата | |
Msg-id | 9275d56e.0105240427.2fa28c31@posting.google.com обсуждение исходный текст |
Список | pgsql-sql |
Alexander Dederer <dederer@spb.cityline.ru> wrote in message news:<9ehged$k4f$1@news.tht.net>... > Can you send PL/SQL code and back-end code used this PL/SQL code? > Myself trubles with CURSOR I resolve use LIMIT ... OFFSET ... It would look something like this: create or replace package my_package AS type gc_cursor is ref cursor; procedure load_users (pp_user_base out gc_cursor); end my_package; / create or replace package body my_package as procedure load_users (pp_user_base out gc_cursor) as begin open pp_user_base for select column1, column2, column3 from my_table order by 1; exception when others then raise_application_error(-20100, 'Error while trying to load user base ' || sqlerrm); end load_users; end my_package; / C program would look something like this: void load_user_base() { EXEC SQL BEGIN DECLARE SECTION; sql_cursor cUserBase; EXEC SQL END DECLARE SECTION; struct USER_PROFILE { ....... } user_profile[ARRAY_LENGTH]; struct USER_PROFILE_IND { ....... } user_profile_ind[ARRAY_LENGTH]; EXEC SQL ALLOCATE :cUserBase; /* allocate the cursor variable */ EXEC SQL EXECUTE BEGIN my_package.load_users(:cUserBase); END; END-EXEC; EXEC SQL WHENEVER NOT FOUND DO break; for (;;) { EXEC SQL FOR :i FETCH :cUserBase INTO :user_profile:user_profile_ind; if (sqlca.sqlcode != 0) { fprintf(stderr, "Fetching users %s\n", sqlca.sqlerrm.sqlerrmc); break; } } ........ ........ Thanks for your response Alla
В списке pgsql-sql по дате отправления: