powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
25 сообщений из 110, страница 1 из 5
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
    #38537790
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задал вопрос в fbdevel, но решил продублировать сюда. Может кто какие мысли выскажет по этому поводу.

CREATE OR ALTER PROCEDURE PROC1
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
returns (i int)
AS
begin
   i = 5;
   suspend;
end^
 
CREATE OR ALTER PACKAGE PKG2
AS
begin
   procedure proc1
   returns (i int);
end^
 
RECREATE PACKAGE BODY PKG2
AS
begin
   procedure proc1
   returns (i int)
   as
   begin
     i = 3;
     suspend;
     i = 4;
     suspend;
   end
end^
 
CREATE OR ALTER PACKAGE PKG1
AS
begin
   procedure proc1
   returns (i int);
 
   procedure proc2
   returns (name varchar(31), i int);
end^
 
RECREATE PACKAGE BODY PKG1
AS
begin
 
   procedure proc1
   returns (i int)
   as
   begin
     i = 1;
     suspend;
     i = 2;
     suspend;
   end
 
   procedure proc2
   returns (name varchar(31), i int)
   as
   begin
     /* pkg1.proc1 */
     name = 'pkg1.proc1';
     for select i
         from proc1
         into :i
     do
       suspend;
 
     /* pkg2.proc1 */
     name = 'pkg2.proc1';
     for select i
         from pkg2.proc1
         into :i
     do
       suspend;
 
     /* Global proc1 How? */
   end
end^



select *
from pkg1.proc2;

Как внутри процедуры PKG1.proc2 вызвать proc1 из глобального пространства имён? Может быть какое-нибудь ключевое слово ввести или синонимы процедур. Типа вот такого.

USE PROC1 AS GLOB_PROC1 в заголовке пакета. А дальше внутри PKG1.proc2 вызывать PROC1 как GLOB_PROC1. Что думаете?
...
Рейтинг: 0 / 0
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
    #38537868
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисЧто думаете?
Да забей. Пакеты на данный момент - просто маркетинговая чушь, Адриано их сделал "чтоб
были", не особо задумываясь над применением.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
    #38537937
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovСимонов ДенисЧто думаете?
Да забей. Пакеты на данный момент - просто маркетинговая чушь, Адриано их сделал "чтоб
были", не особо задумываясь над применением.


Я бы так не сказал. Пакеты очень удобная фича для группировки процедур и функция выполняющих действия над одним бизнес объектом. Например счёт. То что в них сейчас нет переменных пакета как в оракле ещё не означает, что их нельзя применять. Для репликатора конечно пакеты ничего нового не приносят.
...
Рейтинг: 0 / 0
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
    #38538883
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Завести пространство имен GLOBAL? Т.е. ко всему, что не в пакете, можно адресоваться через GLOBAL.xxxx.
...
Рейтинг: 0 / 0
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
    #38538897
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
паскаль.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
var
  i: integer;

procedure p1;
var
  i: integer;
begin
  i := 2;
end;



и как мне, горемыке, обратиться к глобалу изнутри процедуры?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
    #38538903
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

UnitName.I не катит?
...
Рейтинг: 0 / 0
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
    #38538912
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, DarkMaster!
You wrote on 27 января 2014 г. 13:32:00:

DarkMaster> UnitName.I не катит? ты его видишь?


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
    #38538922
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

А проверить - вот скрин из D6.
...
Рейтинг: 0 / 0
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
    #38538923
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

Т.е. я к тому, что или имя пакета, или если его нет - GLOBAL.
...
Рейтинг: 0 / 0
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
    #38538924
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

как обойти проблему я знаю. Но это тогда вообще все ХП и процедуры надо из глобального пространства убирать и вносить в отдельный пакет. Не уверен что это правильно. Ещё правильней на данный момент не создавать одноимённых процедур и функций в пакете и глобвльном пространстве. Например все глобальным процедурам давать префикс SP_. Вот с функциями сложней. Префикс к ним криво выглядит. Адриано сказал, что когда будут схемы можно через идентификатор схемы будет обратиться. :-)
...
Рейтинг: 0 / 0
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
    #38538929
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterМимопроходящий,

Т.е. я к тому, что или имя пакета, или если его нет - GLOBAL.

Блин, ну вы поняли:
- нет имени пакета - обращаемся к чему-то внутри пакета
- есть имя пакета - обращаемся к другому пакету
- есть GLOBAL - зовем то, что не входит в пакеты
...
Рейтинг: 0 / 0
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
    #38538933
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, DarkMaster!
You wrote on 27 января 2014 г. 13:42:08:

DarkMaster> А проверить
Дмитрий, ты ж взрослый мужик.
Шо ж ты ерунду городишь.

ыщо раз смотри мой пример.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
    #38538936
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Ну почему сразу вносить в отдельный пакет? Тут скорее что-то вроде алиаса получается.
...
Рейтинг: 0 / 0
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
    #38538943
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

про алиасы я сразу сказал USE PROCEDURE PROC1 AS GLOB_PROC1
...
Рейтинг: 0 / 0
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
    #38538952
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

Гм.. Ну видимо я чего-то непонимаю:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
var I:integer;  // global

procedure TForm1.Button1Click(Sender: TObject);
var i,                    // local
     N:integer;
begin
  Unit1.I:=1000;     // global
  I:=2;                 // local  
  N:=Unit1.I+I;      // local + global
  ShowMessage(IntToStr(N));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  ShowMessage(IntToStr(I)); // global
end;
...
Рейтинг: 0 / 0
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
    #38538956
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

А я про то, USE .. bla-bla.. можно заменить на GLOBAL.xxx. И не давать создавать пакет с таким именем.
...
Рейтинг: 0 / 0
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
    #38538965
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

Симонов ДенисАдриано сказал, что когда будут схемы можно через идентификатор схемы будет обратиться. :-)
...
Рейтинг: 0 / 0
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
    #38539014
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, DarkMaster!
You wrote on 27 января 2014 г. 14:20:12:

DarkMaster> Гм.. Ну видимо я чего-то непонимаю:
не понимаешь.
специально для тебя:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
{$APPTYPE CONSOLE}

var
  i: integer;

procedure p1;
var
  i: integer;
begin
  i := 100;
end;

begin
  i := 1;
  p1;
  Writeln(i);
  Writeln('press Enter');
  Readln;
end.



сохрани как dpr и запусти на выполнение.

где у тебя (у меня) тут требуемое имя модуля для подстановки?


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
    #38539027
Tactical Nuclear Penguin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийсохрани как dpr и запусти на выполнение.

где у тебя (у меня) тут требуемое имя модуля для подстановки?




а у dpr что, нету имени?
...
Рейтинг: 0 / 0
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
    #38539040
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Tactical Nuclear Penguin!
You wrote on 27 января 2014 г. 14:33:57:

Tactical Nuclear Penguin> а у dpr что, нету имени?
ты код компилировал?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
    #38539041
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисАдриано сказал, что когда будут схемы можно через идентификатор схемы
будет обратиться. :-)
На что ты же и ответил, что тогда будет ещё больший геморрой с пакетами, имеющими то же
имя что и схема. И опять выползет та же синтаксическая проблема с вызовом процедур без
префиксов: вызывать её из пакета, текущей схемы или откуда-то ещё.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
    #38539044
Tactical Nuclear Penguin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МимопроходящийHello, Tactical Nuclear Penguin!
You wrote on 27 января 2014 г. 14:33:57:

Tactical Nuclear Penguin> а у dpr что, нету имени?
ты код компилировал?


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
program Project1;
{$APPTYPE CONSOLE}
var
  i: integer;

procedure p1;
var
  i: integer;
begin
  project1.i := 100;
end;
...
Рейтинг: 0 / 0
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
    #38539048
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Tactical Nuclear Penguin!
You wrote on 27 января 2014 г. 14:36:28:

Tactical Nuclear Penguin> program Project1;
уйди.
совсем уйди.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
    #38539052
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

там можно выкрутиться. Например в PostgreSQL сделали схему по-умолчанию с именем public. И вообще вне схемы ничего не создаётся
...
Рейтинг: 0 / 0
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
    #38539096
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денистам можно выкрутиться.
Сейчас тоже можно выкрутиться, причём так, что проблем в будущем не возникнет: потребовать
обращение к процедурам и функциям пакета всегда (даже внутри пакета) предварять его
(пакета) именем.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25 сообщений из 110, страница 1 из 5
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]