Jump to content
Fórum Script Brasil
  • 0

Acessar dinamicamente uma coluna de uma table


jc101b
 Share

Question

Ola pessoal...

to começando com no postgree... eu não quero criar as primary key usando o tipo SERIAL, pois usa o tipo int...eu quero criar os meus codigo de clientes usando os digito verificador e para isso crio no tipo char...até poderia ser com int..mas teria que poder modificar o  CREATE SEQUENCE da coluna SERIAL da table... ainda não tentei criar uma modificada...claro não é só para cliente, é tb para funcionarios, titulos etc....então a minha duvida/dificuldade é criar uma funcao utilizada na trigger de cada table em que eu passaria a coluna que eu quero acessar na minha table de controle(ctl) :

CREATE OR REPLACE FUNCTION seqDig(tab character, col character )   RETURNS trigger AS $$

--- aqui nessa função eu estou acessando table clientes(cli) e a de controle(ctl) 

-- cl01 eu passar como caracter na var de parametro col="cl01" 

-- $1 é primeiro parametro contem o alias/table em uso , $2 é o segundo parametro, contem o nome da coluna da primary key
  DECLARE
--    c  ctl%ROWTYPE;
    ccl01 char(10);
  BEGIN
    IF (TG_OP = 'INSERT') THEN
      update ctl SET $2 = geraseq(cl01);
--      update ctl SET cl01 = geraseq(cl01);
--      SELECT cl01 INTO cli FROM ctl;
      SELECT $1  INTO $2 FROM ctl;
--      NEW.$1 := ccl01;
      NEW.cl01 := ccl01;
    END IF;
    RETURN NEW;
  END;
$$  LANGUAGE plpgsql 
o quero é não reescrever essa trigger para cada table onde eu uso primary key SERIAL...

estudando mais cheguei nisso, mas da erro na linha assinalada, se alguém tiver uma dica ... eu agradeço a gentileza...

CREATE OR REPLACE FUNCTION codSeq() RETURNS trigger AS $codSeq$
  DECLARE
    c  ctl%ROWTYPE;
    tb character(20);
    cl character(20);
  BEGIN
    tb:=TG_ARGV[0]; -- nome da table
    cl:=TG_ARGV[1]; -- nome da coluna/campo
    IF (TG_OP = 'INSERT') THEN
      EXECUTE 'update ctl SET '||cl||' = geraseq('||cl||')';
      SELECT *  INTO c FROM ctl;
      EXECUTE 'NEW.'||cl||':= c.'||cl; --- aqui da erro quando no insert  na table cli
    END IF;
    RETURN NEW;
  END;
$codSeq$ LANGUAGE plpgsql;

-- CREATE  TRIGGER cli_seq BEFORE INSERT ON cli  FOR EACH ROW  EXECUTE PROCEDURE codSeq('cli','cl01');

Edited by jc101b
Link to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      150.1k
    • Total Posts
      647.1k
×
×
  • Create New...