Nici Posted June 5, 2006 at 01:19 PM Report Share #31293 Posted June 5, 2006 at 01:19 PM Olá a todos. 😛 Estou a fazer um trabalho em MySQL a nível de software de bases de dados só conhecia antes o Acess. Eu criei as tabelas no MySql Administrator. Como no Access, depois de criarmos as tabelas com os atributos temos também de fazer as ligações 1-n ou n-n entre as tabelas, acho que no mysql também seria necessário. Ou não é bem assim? Estou um pouco confusa... 😁 Link to comment Share on other sites More sharing options...
M6 Posted June 5, 2006 at 01:36 PM Report Share #31296 Posted June 5, 2006 at 01:36 PM O MySQL, assim como qualquer base de dados relacional, permite efectuar relações entre tabelas, daí o facto de ser uma BD relacional. As relações são feitas através de chaves estrangeiras, comumente designadas por FKs (foreign keys). Devias estudar um pouco de SQL standard, norma 92 ou 99, para compreenderes o que deve ser feito e como se faz. 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar." Link to comment Share on other sites More sharing options...
Nici Posted June 6, 2006 at 06:05 PM Author Report Share #31498 Posted June 6, 2006 at 06:05 PM A teoria de bases de dados relacionais eu sei. Chaves primárias, etc. Já estudei isso há uns anos e agora novamente. Mas o software MySQL é q é novo p mim. 😛 Por isso como no M.Access eu tinha mesmo de ligar as tabelas "à mão" eu perguntei se era necessário fazer o mm no Mysql. Mas eu vou fazer umas querys p ver se a base de dados está a funcionar bem. O pior vai ser depois pq vou ter de usar o Lazarus como interface com o utilizador... 😁 Link to comment Share on other sites More sharing options...
mAiN_iNfEcTiOn Posted June 6, 2006 at 09:01 PM Report Share #31525 Posted June 6, 2006 at 09:01 PM Desculpem lá, mas aproveito e coloco aqui a minha dúvida... Eu percebo, minimamente de bases de dados relacionais... E como é do senso comum, as 'consultas' do MS Access são as Stored Procedures e Functions do MySQL... A minha dúvida é a seguinte... Como é que eu faço para executar uma stored procedure com base nos resultados de outra... Mais explicitamente: Tenho a SP A e a SP B Quero fazer isto... SP A faz "SELECT * FROM tabela1 WHERE tabela1.lingua='pt'; " SP B faz "SELECT * FROM A WHERE A.ID=3;" (Onde A representa o resultado/recordset da PRIMEIRA Stored Procedure) Link to comment Share on other sites More sharing options...
TheDark Posted June 6, 2006 at 10:05 PM Report Share #31531 Posted June 6, 2006 at 10:05 PM Porque não fazer directamente "SELECT * FROM tabela1 WHERE tabela1.lingua='pt' AND ID=3;" ? Desaparecido. Link to comment Share on other sites More sharing options...
mAiN_iNfEcTiOn Posted June 8, 2006 at 01:47 PM Report Share #31798 Posted June 8, 2006 at 01:47 PM ... Aquilo foi um exemplo... Logicamente que imagina que eu tenho uma SP A muito mais complexa... e quero que a SP B utilize um dos campos do resultado da A para fazer uma outra consulta (logicamente NÃO semelhante)... Nao vou tar a reformular o codigo todo, kdo posso muito bem fazer uma Stored Procedure mais simples... Link to comment Share on other sites More sharing options...
pedrotuga Posted June 8, 2006 at 03:10 PM Report Share #31816 Posted June 8, 2006 at 03:10 PM Nici, as relações são implicitas no SQL, ten um exemplo bom dado pelo TheDark aqui mesmo acima. Se usares anão ser que cries tabelas do tipo innodb a uncia forma de definires relacionamentos é mesmo implicitamente no SQL. main infection... o mysql 5 já permite subqueries... agora quanto a procedimentos... em mysql... nem tenho a certeza se se pode definir... podem? Link to comment Share on other sites More sharing options...
mAiN_iNfEcTiOn Posted June 8, 2006 at 07:01 PM Report Share #31882 Posted June 8, 2006 at 07:01 PM http://www.devshed.com/c/a/MySQL/A-DIY-Approach-to-Stored-Procedures-in-MySQL/ Se vires bem... Dá para fazer Stored Procedures.... 😉 Link to comment Share on other sites More sharing options...
pedrotuga Posted June 8, 2006 at 11:23 PM Report Share #31995 Posted June 8, 2006 at 11:23 PM yeps.. da sim senhor... n sabia. Leste o manual... ess situaão não parece vir lá discrita, acho que podes perfeitamente chaar um procedimento dentro de outro. Link to comment Share on other sites More sharing options...
M6 Posted June 9, 2006 at 07:20 PM Report Share #32141 Posted June 9, 2006 at 07:20 PM Desculpem lá, mas aproveito e coloco aqui a minha dúvida... Eu percebo, minimamente de bases de dados relacionais... E como é do senso comum, as 'consultas' do MS Access são as Stored Procedures e Functions do MySQL... A minha dúvida é a seguinte... Como é que eu faço para executar uma stored procedure com base nos resultados de outra... Mais explicitamente: Tenho a SP A e a SP B Quero fazer isto... SP A faz "SELECT * FROM tabela1 WHERE tabela1.lingua='pt'; " SP B faz "SELECT * FROM A WHERE A.ID=3;" (Onde A representa o resultado/recordset da PRIMEIRA Stored Procedure) Não sei nada quanto às consultas do Access, mas o que tu queres fazer não é possível. O que tu queres tem de ser feito com uma query sobre tabelas e o que estás a usar são SPs, a forma de funcionar de ambas é totalmente distinto. 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar." Link to comment Share on other sites More sharing options...
M6 Posted June 9, 2006 at 07:41 PM Report Share #32149 Posted June 9, 2006 at 07:41 PM A teoria de bases de dados relacionais eu sei. Chaves primárias, etc. Já estudei isso há uns anos e agora novamente. Mas o software MySQL é q é novo p mim. 🙂 Por isso como no M.Access eu tinha mesmo de ligar as tabelas "à mão" eu perguntei se era necessário fazer o mm no Mysql. Mas eu vou fazer umas querys p ver se a base de dados está a funcionar bem. O pior vai ser depois pq vou ter de usar o Lazarus como interface com o utilizador... 😉 Tens de fazer as relações em SQL puro. 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar." Link to comment Share on other sites More sharing options...
mAiN_iNfEcTiOn Posted June 10, 2006 at 02:06 PM Report Share #32264 Posted June 10, 2006 at 02:06 PM Não sei nada quanto às consultas do Access, mas o que tu queres fazer não é possível. O que tu queres tem de ser feito com uma query sobre tabelas e o que estás a usar são SPs, a forma de funcionar de ambas é totalmente distinto. Vamos la ver o seguinte... Ao executares uma SP do tipo SELECT * FROM TABELA a SP vai retornar um 'recordset' (conjunto de registos) e ISSO é que me interessa para a segunda SP... ou seja, eu kero executar a SP A dentro da SP B para usar os dados retornados da A na pesquisa da B.... GOT IT? Link to comment Share on other sites More sharing options...
M6 Posted June 12, 2006 at 10:55 PM Report Share #32662 Posted June 12, 2006 at 10:55 PM Não sei nada quanto às consultas do Access, mas o que tu queres fazer não é possível. O que tu queres tem de ser feito com uma query sobre tabelas e o que estás a usar são SPs, a forma de funcionar de ambas é totalmente distinto. Vamos la ver o seguinte... Ao executares uma SP do tipo SELECT * FROM TABELA a SP vai retornar um 'recordset' (conjunto de registos) e ISSO é que me interessa para a segunda SP... ou seja, eu kero executar a SP A dentro da SP B para usar os dados retornados da A na pesquisa da B.... GOT IT? Sim eu percebi, tu é que não percebeste o que te disse: tal não é possível. Passo a explicar o porquê: quando executas um SP o que o SGBD faz é, grosso modo, uma execução de uma função que, no teu caso específico, retorna um record set. Mas o que o SGBD tem de fazer para o que tu pretendes é o produto carteziano entre os dados das tabelas, e tal só pode ser efectuado ao nível das tabelas com SQL. Resumindo: os SGBDs não fazem produtos cartezianos entre recordsets apenas entre tabelas. Podes pensar em passar o recordset como argumento para dentro do SP B, mas isso, excepto em situações muito mas mesmo muito particulares e muito mas mesmo muito bem explicadas, é uma péssima (e digo péssima para ser muito, mas mesmo muito simpático) abordagem pois trabalhar o cursor dentro do SP para usar os seus valores dentro de uma query é totalmente ineficiente e faz transparecer que há algo de muito mal na estratégia usada. 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar." Link to comment Share on other sites More sharing options...
mAiN_iNfEcTiOn Posted June 13, 2006 at 04:12 PM Report Share #32783 Posted June 13, 2006 at 04:12 PM Bem... descobri qualquer coisa... e de facto tens razão não é possível fazer tal coisa nas stored procedures... Mas é possível usar VIEWS dentro de Stored Procedures, bem como em queries e mesmo até dentro de views... Vejam AQUI para mais info... =) 😄 Link to comment Share on other sites More sharing options...
M6 Posted June 15, 2006 at 09:27 AM Report Share #33066 Posted June 15, 2006 at 09:27 AM Bem... descobri qualquer coisa... e de facto tens razão não é possível fazer tal coisa nas stored procedures... Que tinha razão já eu sabia, mas não é disso que se trata... Mas é possível usar VIEWS dentro de Stored Procedures, bem como em queries e mesmo até dentro de views... Vejam AQUI para mais info... =) 😛 😛 Estou a ver que estás agora a descobrir o mundo das BDs. As views são construídas à custa de queries e depois podem ser usadas como se fossem tabelas para pesquisa, ou seja, podes fazer um select sobre uma view, ou, "melhor ainda", podes fazer qualquer combinação de joins entre views e tabelas. Quanto às SPs, elas grosso modo elas podem ser vistas como funções que retornam, ou não, um tipo de dados. Dentro delas podes fazer milhentas coisas, como por exemplo atribuir o resultado de select a um cursor para ser manipulado, invocar outras SPs, executar qualquer comando SQL standard, controlo transaccional e muito mais. As SPs são uma porta aberta para um conjunto de operações sobre e na BD que de outra forma não seria possível efectuar, pelo menos de forma eficiente. 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar." Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now